使用 JWT 刷新令牌如何安全?

Posted

技术标签:

【中文标题】使用 JWT 刷新令牌如何安全?【英文标题】:how is using JWT refresh token secure? 【发布时间】:2022-01-19 14:10:18 【问题描述】:

据我所知,

您可以缩短 JWT 访问令牌的生命周期,这样如果有人可以访问它,它就不会工作很长时间。但是,我们不会对 JWT 刷新令牌做同样的事情来增强用户体验。

但是现在,如果有人可以访问我的 JWT 刷新令牌,这将授予他们访问受保护资源的权限。那么它的安全性如何呢?

【问题讨论】:

【参考方案1】:

我理解你的问题 if someone has access to my JWT Refresh Token, that would grant them access to the protected resources. So how is it secure then?

要检查它是否安全,您可以做的是,验证令牌检查其声明,并交叉检查是否与绕过某些变量(例如 user-iduser-emailuser-password 当你点击 refresh-token 函数时。如果任何条件失败,您可以返回Invalid-tokenUnauthorized 并把他踢出去。

这里是the workflow for validating a refresh token and issuing a new bearer token?的解释

【讨论】:

【参考方案2】:

需要以安全的方式管理和处理刷新令牌。最好,刷新令牌不应该在浏览器中结束。刷新令牌也永远不会发送到 API。

所以刷新令牌只是在客户端和授权服务器(不是浏览器或 API)之间发送的东西

所以,如果你做的一切正确,刷新令牌永远不会离开后端(不会暴露给浏览器),那么它是非常安全的(除非你的后端被黑客入侵,但无论如何你游戏结束了)。

您可以通过使用证书和其他网络限制保护客户端后端应用程序和授权服务器之间的通信通道来进一步加强它。因此,如果您遵循 OAuth 2.1 中所述的最佳做法,那么它是非常安全可靠的。

因此,结论是,由于刷新令牌从未在最初收到它的客户端之外使用,因此它非常安全,只要后端没有被黑客入侵,那么它就是安全的。

如果您正在构建一个 SPA 客户端(React...),那么您应该考虑使用 BFF 模式。因为在浏览器中处理令牌从来都不是一个好主意。另见video

【讨论】:

这是更详细的答案。

以上是关于使用 JWT 刷新令牌如何安全?的主要内容,如果未能解决你的问题,请参考以下文章

使用刷新令牌和访问令牌如何比仅使用 1 个 JWT 更“安全”?

刷新令牌如何为 jwt 添加安全性?

安全性 - JWT 和 Oauth2(刷新令牌)

JWT 访问令牌和刷新令牌安全性

JWT - 刷新令牌和安全改进

为啥使用 JWT 刷新令牌