为什么使用刷新令牌必须更换?
Why refresh token has to be replaced when used?
我看到大多数人说当我们使用刷新令牌来交换新的访问令牌时,授权服务器会发出一个新的刷新令牌并使之前的刷新令牌无效。参考
OAuth Refresh Token Best Practice
但来自 OAuth 网站
https://www.oauth.com/oauth2-servers/access-tokens/refreshing-access-tokens/
它说认证服务器可以"optionally issue a new fresh token in response, or if we don't include a new refresh token, the client assumes the current refresh token will continue to be valid"
因此,这两个选项(保留或更新刷新令牌)似乎都符合 OAuth2 标准。
我的问题是:
1) 这两种选择是否同样安全?
2) 如果auth服务器returns一个新的refresh token但是client没有收到(例如网络错误),client没有办法用已经存在的refresh token重新获得access token无效。正确吗?
3) 如果刷新令牌已经泄露给其他人,攻击者和受害者客户端都可以使用它。如果auth server采用更新方式,那么只有第一个使用refresh token的才能重新获得access token。因此,如果受害者发现刷新令牌不再有效,它可能会认为刷新令牌已被泄露。这是 "renewal approach" 的原因吗?
2.) 是的,没错。
3.) 这也是对的。您可以查看讨论刷新令牌重新生成的 OAuth 2.0 for Browser-Based Apps RFC。这主要对 public 客户很重要 - 没有 client_secret 的客户,因为刷新令牌可以立即交换为访问令牌。
1.) 刷新令牌重新生成是一项安全功能 - 它缩短了被盗刷新令牌的有效性,并使身份验证服务器能够检测到刷新令牌已被泄露。所以使用它比不使用它更安全。但是对于私人客户来说,不在每次使用时都获得新的刷新令牌可能更方便——例如,为了防止由于网络错误而导致刷新令牌丢失——正如你在第 2 点中所描述的那样。
我看到大多数人说当我们使用刷新令牌来交换新的访问令牌时,授权服务器会发出一个新的刷新令牌并使之前的刷新令牌无效。参考 OAuth Refresh Token Best Practice
但来自 OAuth 网站 https://www.oauth.com/oauth2-servers/access-tokens/refreshing-access-tokens/
它说认证服务器可以"optionally issue a new fresh token in response, or if we don't include a new refresh token, the client assumes the current refresh token will continue to be valid"
因此,这两个选项(保留或更新刷新令牌)似乎都符合 OAuth2 标准。
我的问题是:
1) 这两种选择是否同样安全?
2) 如果auth服务器returns一个新的refresh token但是client没有收到(例如网络错误),client没有办法用已经存在的refresh token重新获得access token无效。正确吗?
3) 如果刷新令牌已经泄露给其他人,攻击者和受害者客户端都可以使用它。如果auth server采用更新方式,那么只有第一个使用refresh token的才能重新获得access token。因此,如果受害者发现刷新令牌不再有效,它可能会认为刷新令牌已被泄露。这是 "renewal approach" 的原因吗?
2.) 是的,没错。
3.) 这也是对的。您可以查看讨论刷新令牌重新生成的 OAuth 2.0 for Browser-Based Apps RFC。这主要对 public 客户很重要 - 没有 client_secret 的客户,因为刷新令牌可以立即交换为访问令牌。
1.) 刷新令牌重新生成是一项安全功能 - 它缩短了被盗刷新令牌的有效性,并使身份验证服务器能够检测到刷新令牌已被泄露。所以使用它比不使用它更安全。但是对于私人客户来说,不在每次使用时都获得新的刷新令牌可能更方便——例如,为了防止由于网络错误而导致刷新令牌丢失——正如你在第 2 点中所描述的那样。