【问题标题】:Provide a new token based on the refresh token without going to the client - JWT - Asp.net core基于刷新令牌提供新令牌而不去客户端 - JWT - Asp.net core
【发布时间】:2020-06-01 15:36:16
【问题描述】:

我找到了很多链接,但我没有找到解决问题的方法。

我正在尝试在 asp.net 核心中实现 jwt 刷新令牌。

为了存储刷新令牌,我创建了表。 根据 jwt 的建议,对于 SPA 应用程序,我们不应该向客户端公开刷新令牌。 https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/

所以我已经计划好了,

  • 在用户登录时,创建访问令牌并共享给客户端
  • 为访问令牌创建一个刷新令牌并将其存储在数据库中,并将其存储在仅 HTTP cookie 中
  • 当用户访问授权控制器和操作时,如果访问令牌过期,我想根据刷新令牌生成新令牌。

但是, 在很多地方,我发现用户会发送请求。如果未经授权,则用户将使用存储的刷新令牌(本地存储或其他)请求新的访问令牌,并再次调用有效的 api 请求。

我不想像上一段中提到的那样(对吗?)。

当用户发送请求时,如果它无效,我想验证服务器端本身的令牌,需要提供新的访问令牌并继续最后一次 api 调用。

这个实现有什么解决方案,比如解释授权和验证?

【问题讨论】:

    标签: asp.net asp.net-core jwt authorize


    【解决方案1】:

    在我看来,在 SPA 应用程序中使用/保持刷新令牌是危险的。刷新令牌是一个强大的工具,它几乎和密码本身一样强大。将其存储在 cookie 或 localStorage 中,这两个选项本质上都是不安全的,因为它们容易受到针对客户端应用程序的 CSRF 或 XSS 攻击。所以我认为最好只保留访问令牌并在访问令牌过期时进行静默登录以更新它。

    因此,如果客户端应用程序是 SPA 应用程序,即使使用 Code + PKCE,我认为返回并使用刷新令牌不是一个好主意。

    【讨论】:

    • 静默登录是什么意思?我们是否需要将用户凭据保存在本地存储中并进行自动登录? - 同时我在某处读到如果我们为cookie启用httponly(asp.net核心),攻击将被避免。
    • 否,您可以点击这里了解更多详情:medium.com/better-programming/…
    • 您可以将访问令牌存储在 httponly 和 cookie 的安全标志中,并且还可以保护您的表单免受 CSRF 攻击。但是刷新令牌不是为 SPA 设计的
    • 谢谢。但是如果刷新令牌不是为 SPA 设计的,我们可以在访问令牌过期时做什么......
    猜你喜欢
    • 2018-03-30
    • 2016-03-05
    • 2016-06-25
    • 2018-12-08
    • 2019-10-11
    • 1970-01-01
    • 2018-09-29
    • 2021-04-06
    • 2017-10-11
    相关资源
    最近更新 更多