我正在开发一个基于 Node 的 SPA 应用程序,并使用 JWT 进行基于令牌的身份验证。目前,jwt 令牌永远不会过期,这不太好。
我希望它过期以提高安全性,但我不希望我的用户被迫重新登录。这就是为什么我需要刷新令牌。
所以我正在阅读有关 OAuth2 的内容。
我很难理解为什么刷新令牌必须存储在数据库中,而访问令牌是使用密钥动态生成的。
为什么刷新令牌不能以与访问令牌相同的方式生成?
感谢你们 !
刷新令牌的生成方式通常与访问令牌相同。
如果有请求,授权服务器通常会返回刷新和访问令牌(并且您没有使用隐式授予类型)。
区别在于它们的使用方式。
访问令牌通常是不记名令牌:任何拥有它的人都可以在资源服务器上使用它,但它仅在短时间内有效。在这种情况下,将它们存储在数据库中通常毫无意义,因为它们一旦过期就毫无价值。
然而,刷新令牌就像可以访问“锻造”,它允许您铸造新令牌。
如果您向授权服务器(而不是资源服务器)提供刷新令牌,您将得到一个新的访问令牌,并且可能还得到一个新的刷新令牌。
当然,前提是用户没有撤销/更改对您的应用程序的访问权限,并且该用户仍然是有效用户。
因此,您可能会将它们保存在数据库中,因为您的用户很少登录。因此,您可能在获得刷新令牌几周后就需要它。
刷新令牌的替代方案。
如果您使用隐式授权(这在 SPA 中很常见,但不推荐)。您可以尝试让最终用户登录到授权服务器使用的身份提供商。这样,您就可以继续从身份验证服务器请求新的访问令牌,而无需身份验证服务器提示用户输入凭据,因为会话将在身份提供者和用户的浏览器之间保留。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)