我看到大多数人说,当我们使用刷新令牌交换新的访问令牌时,身份验证服务器将发布新的刷新令牌,并使先前的令牌无效。参考 OAuth Refresh Token Best Practice
但是从OAuth网站 https://www.oauth.com/oauth2-servers/access-tokens/refreshing-access-tokens/
它说,身份验证服务器可以“有选择地发出新的刷新令牌作为响应,或者如果我们不包括新的刷新令牌,则客户端会认为当前的刷新令牌将继续有效”。
因此,看起来两个选项(保留或更新刷新令牌)对于OAuth2标准都是可以接受的。
我的问题是:
1)两种选择是否同样安全?
2)如果身份验证服务器返回了新的刷新令牌,但客户端无法接收到消息(例如,网络错误),则客户端将无法使用现有的刷新令牌重新获得访问令牌,而现有的刷新令牌已经失效。是吗?
3)如果刷新令牌已泄漏给其他人,则攻击者和受害客户端都可以使用它。如果身份验证服务器采用续订方法,则只有第一个使用刷新令牌的服务器才能重新获得访问令牌。因此,如果受害者发现刷新令牌不再有效,则可能认为刷新令牌已被破坏。这是采用“更新方法”的原因吗?
答案 0 :(得分:2)
2。)是的,这是正确的。
3。)也是正确的。您可以查看OAuth 2.0 for Browser-Based Apps RFC,其中讨论了刷新令牌的重新生成。这主要对公共客户端(没有client_secret的客户端)很重要,因为可以立即将刷新令牌交换为访问令牌。
1。)刷新令牌再生是一项安全功能-缩短了被盗刷新令牌的有效性,并使身份验证服务器能够检测到刷新令牌已被破坏。因此,使用它比不使用它更安全。但是,对于私有客户端来说,每次使用时不获取新的刷新令牌可能更为方便-例如,以防止由于网络错误而导致的刷新令牌丢失-如您在第2点中所述。