如何防止刷新被盗的访问令牌

Posted

技术标签:

【中文标题】如何防止刷新被盗的访问令牌【英文标题】:How to prevent refreshing a stolen access token 【发布时间】:2018-10-21 21:34:07 【问题描述】:

场景是:你有一个有效期较长的刷新令牌和一个有效期较短的访问令牌。

设置:有客户端、应用服务器和认证服务器。

客户端存储访问令牌。 应用程序服务器存储刷新令牌。 身份验证服务器分发刷新 + 访问令牌。

其中一个优点是被盗的访问令牌只能在其有效时间内使用。

假设黑客窃取了有效期为 30 分钟的访问令牌。当黑客在 30 分钟后使用有效但已过期的被盗访问令牌发出请求时,应用服务器会使用刷新令牌对其进行刷新,从而使黑客获得一个新的有效且未过期的访问令牌。

如何预防?

【问题讨论】:

嘿@Arthur。如果你找到了这个问题的最佳解决方案,请告诉我。我对这条线很困惑,如何防止这种情况? :--> Say a hacker steals the access token that is valid for 30 minutes. When the hacker makes a request with the valid but expired stolen access token after 30 minutes, the application server refreshes it with the refresh token, thus the hacker gaining a new valid and not expired access token. 【参考方案1】:

没有办法阻止黑客刷新令牌,除非

    原用户重置密码,AUTH服务器删除了之前的所有刷新令牌。

    减少刷新令牌的有效时间更接近访问令牌的有效性。

在这两种情况下,我们都依赖于使刷新令牌无效。

【讨论】:

【参考方案2】:

应用服务器不应该有刷新令牌。

在 OAuth2.0 中,client 应该存储刷新令牌。

要使用刷新令牌来生成新的访问令牌,client 应向授权服务器提供刷新令牌(连同客户端 ID 和密码)。

【讨论】:

以上是关于如何防止刷新被盗的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何使用被盗令牌防止 Rest Web 服务身份验证

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

令牌被盗时如何添加额外的jwt安全层

刷新 IdentityServer4 客户端中的访问令牌

保护 Azure Active Directory B2C 访问令牌和刷新令牌

访问令牌和刷新令牌最佳实践?如何实现访问和刷新令牌