为什么我们需要 JWT 中的刷新令牌

Why do we need refresh tokens in JWT

我刚刚在 nodejs 中学习 JWT,我发现了刷新令牌。

据我了解,用户会获得一个访问令牌和一个刷新令牌。访问令牌过期后,将发出包含刷新令牌的请求以获取新的访问令牌。为了获得新的访问令牌,服务器检查接收到的刷新令牌是否包含在数据库中。如果刷新令牌被盗,它可以很容易地从数据库中删除并阻止进一步刷新。

我的问题是:为什么我们不让访问令牌的行为像刷新令牌一样?也就是说,我们将它们存储在数据库中,并在发出请求时检查它们是否存在,当受到威胁时我们就删除它们?

回答您的问题的关键要素是:您需要在交付给客户的访问令牌上添加到期日期。这是刷新令牌的主要目的。

想象一下,有人盗用了您的 access_token,而您没有让它过期:这意味着只要您没有发现您的 access_token 被盗,您就可以字面意义上的终身免费通行证给任何拥有它的人。

有了刷新令牌和过期的access_tokens,你就知道window的漏洞真的很小了。

现在你的第二个问题:为什么我们不让 access_token 表现得像 refresh_tokens?

这里的关键思想是将你的 refresh_token 放在安全的地方,并且只暴露 access_tokens。

顺便说一下,refresh_tokens 有一项工作:携带信息以生成新的 access_tokens,另一方面,access_tokens 有自己的工作:携带必要的信息以生成新的 access_tokens让您直接访问资源。

如果您关注最严肃的网站,他们有一个集中式身份验证服务器,可为 access_tokens 提供服务。