【问题标题】:JWT refreshing with refresh token使用刷新令牌刷新 JWT
【发布时间】:2021-03-05 14:54:50
【问题描述】:

我正在使用其其余 API 构建 SPA 应用程序,当我应该使用刷新令牌刷新 JWT 时,我找不到信息。当我从服务器收到 401 HTTP 状态(JWT 已过期)或例如每 15 分钟(在 JWT 过期之前)时,我应该这样做吗?

【问题讨论】:

  • 令牌过期前最好刷新一下,如果没有,你应该在客户端获取401 HTTP之后存储请求,直到令牌刷新后再重新发送,因为可靠性。如果您的到期时间足够,请在登录后检查。

标签: node.js jwt


【解决方案1】:

我不是安全专家,但据我们所知,我们

1-登录并保存收到的令牌

2- 我们放置了一个拦截器来检查每个响应(在角度上很容易,在反应中我们通常使用axios ...等)

3- 我们检查拦截器中的每个响应,如果响应是401 并且来自令牌的expiration date 已通过,我们发送refresh token 请求并保存新令牌

要检查到期日期,您可以使用解码令牌的库,例如:npm 上的jwt-decode,(不要忘记将过程包装在try...catch 中,以防有人搞砸令牌),您甚至可以粘贴https://jwt.io/ 中的令牌,并亲自查看已解码的令牌并检查到期日期。

4- 使用新令牌重复上一个请求应该会成功。

5- 例如,如果刷新令牌请求失败,只需将用户重定向到登录页面

【讨论】:

  • 那么你是在前端解析 JWT 并检查过期日期吗?当用户计算机中的日期不真实时,一切都不会崩溃吗? (在这种情况下,服务器上的日期可以通过但浏览器中没有)
  • 我在答案中写了一个不解码令牌,没有为什么会崩溃,最坏的情况是令牌无效并且请求失败
  • 好答案。我唯一要补充的是,您应该将旋转刷新令牌与 SPA 一起使用,而不是非旋转刷新令牌(仅应与本机应用程序一起使用)。见auth0.com/blog/…
【解决方案2】:

如果服务器在access_token过期的情况下发送正确的错误代码,那么您可以在客户端拦截错误代码并使用您之前在身份验证期间获得的refresh_token来获取新的访问令牌。您可以一次又一次地重复此过程,直到您的刷新令牌过期。在这种情况下,您应该重定向用户以执行身份验证以获取两个令牌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 2016-06-25
    • 2021-04-06
    • 2017-10-11
    • 2016-10-14
    • 2020-12-26
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多