在 SPA 中刷新 JWT 的最佳实践?

Posted

技术标签:

【中文标题】在 SPA 中刷新 JWT 的最佳实践?【英文标题】:Best practices for refreshing JWT in SPA? 【发布时间】:2018-11-02 10:23:38 【问题描述】:

您好,我正在开发一个与 Express API 通信的 React 应用。我正在尝试实现 JWT 身份验证,但我不知道 jwt 过期时会发生什么。如果用户在令牌过期时注销,这似乎不太友好。

我应该使用刷新令牌吗?正如它在 node-jsonwebtoken 包文档 (jsonwebtoken) 中所说的那样。这可能不是最好的方法。

我应该在对服务器的每个请求中创建一个新的 jwt 吗?如果用户长时间阅读文章而没有做任何请求,他将被注销。

也许我错了,最佳做法是使用较长的过期时间并让用户退出。如果是这种情况,什么是合理的时间?

谢谢!

【问题讨论】:

【参考方案1】:

通常与刷新令牌一起使用的模式是遵循以下工作流程:

    某些 API 调用/资源返回 401,提醒令牌已过期,这有时伴随着原因,例如过期令牌,无效令牌 创建对失败的 API 调用的引用,以便稍后重试 尝试使用 refresh_token 刷新令牌 如果刷新成功,请继续执行排队的 API 调用 如果刷新失败,用户需要重新登录

您还可以使用上述方法对多个失败的请求进行排队,以防在进行刷新时多次调用失败。

再加上适当的到期时间,这实际上取决于您的应用程序,这在过去对我来说已被证明是一个可靠的解决方案。

另一种方法是实现“心跳”API 调用,当用户在网站上时定期更新用户的令牌,但这可能会带来可能不希望出现的副作用。

【讨论】:

以上是关于在 SPA 中刷新 JWT 的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

在 nodejs 中使用 JWT 刷新令牌的最佳实践

Spring Boot 中 JWT 的最佳实践是啥?

同时从移动设备和 Web 刷新 JWT 令牌的最佳实践

单页应用SPA开发最佳实践

使用 JWT 进行身份验证的最佳实践

在 ASP.NET 核心中创建 JWT 是不是有更简单的方法?又名“JWT 身份验证的最佳实践?”