为什么刷新令牌更安全?如果刷新令牌也可能被盗,为什么我们要使用刷新令牌?

nor*_*der 14 authorization token jwt

假设我的用户登录了,我给了他 2 个令牌;访问和刷新令牌

访问令牌的有效期为 15 分钟,刷新令牌的有效期为 1 周

我们不想只给他们长期有效的访问令牌,因为有人可以获得该访问令牌并用它发出请求,这就是我们将其有效期设置为 15 分钟的原因。

但是,我们的刷新令牌不会也被盗吗?有人可以获得我们的刷新令牌并获得 1 周的访问权限吗?那么,如果两个不同的令牌都面临危险,为什么我们要提供两个不同的令牌并实施基于访问刷新的令牌身份验证呢?

Mic*_*ski 3

您是对的:),这取决于您使用的应用程序的属性。例如,如果您有一个公共客户端(例如,在浏览器中运行的 SPA),并且您向该客户端授予对访问令牌和刷新令牌的访问权限,那么您确实会失去刷新令牌通常为您提供的附加安全性。如果公共客户端可以刷新令牌,那么窃取您的刷新令牌的任何人都可以使用它来创建新的访问令牌。这就是为什么 SPA 通常不会直接获得刷新令牌 - 这些令牌要么保存在仅限 http 的 cookie 中,要么 SPA 将使用 SSO 会话来刷新访问令牌(然后不使用刷新令牌)。

在机密客户端中,我们可以更安全地使用刷新令牌,因为它们不会那么容易被盗,即使被盗,攻击者也可以访问客户端的秘密以在刷新端点进行身份验证。

@luk2302 在评论中所说的内容也取决于实现。您可以拥有可以撤销访问令牌和刷新令牌的服务器,也可以拥有无​​法撤销刷新令牌的服务器(这不是 OAuth RFC 的要求)。