提供基于刷新令牌的新令牌,而无需前往客户端-JWT-Asp.net Core

时间:2020-02-17 16:42:59

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

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

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

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

所以我已经计划好了,

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

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

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

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

此实现是否有任何解决方案,例如解释授权和验证?

1 个答案:

答案 0 :(得分:0)

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

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