oauth-2.0 - 为什么使用刷新 token 必须更换?

标签 oauth-2.0 refresh-token

我看到大多数人说当我们使用刷新 token 来交换新的访问 token 时,授权服务器会发布一个新的刷新 token 并使之前的 token 无效。引用 OAuth Refresh Token Best Practice

但是来自OAuth网站 https://www.oauth.com/oauth2-servers/access-tokens/refreshing-access-tokens/

它说 auth 服务器可以“选择性地发出一个新的新鲜 token 作为响应,或者如果我们不包含一个新的刷新 token ,客户端假定当前的刷新 token 将继续有效”

因此,看起来 OAuth2 标准可以接受这两个选项(保留或更新刷新 token )。

我的问题是:

1) 这两种选择是否同样安全?

2) 如果授权服务器返回一个新的刷新 token ,但客户端没有收到(例如网络错误),客户端无法使用已经失效的现有刷新 token 重新获得访问 token 。正确吗?

3) 如果刷新 token 已经泄露给其他人,攻击者和受害者客户端都可以使用它。如果auth server采用更新方式,那么只有第一个使用refresh token的才能重新获得access token。因此,如果受害者发现刷新 token 不再有效,它可能会认为刷新 token 已被泄露。这是“更新方法”的原因吗?

最佳答案

2.) 是的,没错。

3.) 这也是正确的。你可以看看OAuth 2.0 for Browser-Based Apps RFC其中讨论了刷新 token 的重新生成。它主要对公共(public)客户端很重要 - 那些没有 client_secret 的客户端,因为可以立即将刷新 token 交换为访问 token 。

1.) 刷新 token 重新生成是一项安全功能 - 它缩短了被盗刷新 token 的有效性,并使身份验证服务器能够检测到刷新 token 已被泄露。所以使用它比不使用它更安全。但是对于私有(private)客户来说,不在每次使用时都获得新的刷新 token 可能更方便——例如,为了防止由于网络错误而导致刷新 token 丢失——正如你在第 2 点中所描述的那样。

关于oauth-2.0 - 为什么使用刷新 token 必须更换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56474152/

相关文章:

ssl - 将 OpenID 与 SSL 和金融交易结合使用的安全方面

java - Google Drive API - OAuth2.0 : How to Automate Authentication Process? 疑虑和问题

angularjs - 使用卫星器在 twitter 中使用 Oauth2 提供商登录

flutter - 如何使用 session 的刷新 token 在 amazon-cognito-identity-dart-2 包 flutter 中获取新的 jwt 访问 token ?

reactjs - 错误 : idpiframe_initialization_failed while implementing OAuth 2. 0

ruby-on-rails - 谷歌身份验证错误: invalid_request Missing required parameter: client_id

Swift AWS Cognito 登录在多次工作后抛出 "Invalid Refresh Token"

jwt - 撤销刷新 token

authentication - "Refresh Token"的用途是什么?

c# - IdentityServer4 刷新 token 为空