【问题标题】:Best practices for refreshing JWT in SPA?在 SPA 中刷新 JWT 的最佳实践?
【发布时间】:2018-11-02 10:23:38
【问题描述】:
您好,我正在开发一个与 Express API 通信的 React 应用。我正在尝试实现 JWT 身份验证,但我不知道 jwt 过期时会发生什么。如果用户在令牌过期时注销,这似乎不太友好。
我应该使用刷新令牌吗?正如它在 node-jsonwebtoken 包文档 (jsonwebtoken) 中所说的那样。这可能不是最好的方法。
我应该在对服务器的每个请求中创建一个新的 jwt 吗?如果用户长时间阅读文章而没有做任何请求,他将被注销。
也许我错了,最佳做法是使用较长的过期时间并让用户退出。如果是这种情况,什么是合理的时间?
谢谢!
【问题讨论】:
标签:
reactjs
express
authentication
jwt
single-page-application
【解决方案1】:
通常与刷新令牌一起使用的模式是遵循以下工作流程:
- 某些 API 调用/资源返回 401,提醒令牌已过期,这有时伴随着原因,例如过期令牌,无效令牌
- 创建对失败的 API 调用的引用,以便稍后重试
- 尝试使用 refresh_token 刷新令牌
- 如果刷新成功,请继续执行排队的 API 调用
- 如果刷新失败,用户需要重新登录
您还可以使用上述方法对多个失败的请求进行排队,以防在进行刷新时多次调用失败。
再加上适当的到期时间,这实际上取决于您的应用程序,这在过去对我来说已被证明是一个可靠的解决方案。
另一种方法是实现“心跳”API 调用,当用户在网站上时定期更新用户的令牌,但这可能会带来可能不希望出现的副作用。