OAuth2 - 刷新令牌不必要的复杂性
OAuth2 - unnecessary complexity with refresh token
我不太明白,如果端点与 RFC6749 中多次描述的相同(授权)服务器,为什么在 oauth2 中有一个 refresh/access 令牌概念。
资源所有者在不共享凭据的情况下授权任何第三方组件时的第一个授权步骤,是 oauth2 的基本思想。使用授权令牌生成访问和刷新令牌只是另一种授权间接级别,但不会增加安全性。
由于授权服务器相同,访问令牌与授权令牌和刷新令牌一样敏感,因此我称之为不必要的复杂性。
对我来说唯一有意义的解释是,如果有人窃取了访问令牌,则客户端可以请求新的访问令牌。但是有人是怎么炼钢的呢?如果是中间人,那么他也有刷新令牌,当客户端请求一个新令牌时。
我的问题是:为什么授权服务器不只是 return 一个可以被客户端和资源所有者撤销的访问令牌? refresh/access代币策略有什么好处?
感谢您的解释。
刷新令牌试图解决服务器负载的细粒度访问检查。当资源所有者在调用之间缓存访问令牌以便它可以授权后续调用而无需转到授权服务器时,就会减少服务器负载。这大大减少了 authz 服务器上的负载。但这会带来一个问题,即令牌权限的更改,特别是令牌可用于的用途的减少,资源所有者在缓存访问令牌时永远不会看到。
现在,行为良好的资源所有者会知道在与授权服务器重新确认令牌之前,它应该只缓存令牌一小会儿。但是您不能指望资源所有者表现良好。因此,授权服务器对访问令牌设置了一个相对较短的到期时间。这会强制客户端使用刷新令牌来获取新的访问令牌。然后资源所有者将验证新的访问令牌并获得令牌的 current 权限。
请务必注意,无需用户交互即可刷新访问令牌。如果重新验证对于用户交互模型来说不是问题,则不需要刷新令牌,用户可以重新验证。但这有点糟糕。
这意味着如果用户要从他们的 OAuth 帐户中删除权限,资源所有者将继续使用旧的权限集,直到访问令牌过期。然后将获得新的访问令牌,新的权限集将生效。
除了 Neil 的出色回答:在只有一个令牌的情况下,您如何想象撤销该令牌会发生什么?这必然会涉及资源服务器 (RS) 咨询授权服务器 (AS),这是一个巨大的开销。这正是分裂存在的原因:短期访问令牌可以独立于 AS 的检查而独立存在。长期存在的刷新令牌协调访问权限与 AS。
我不太明白,如果端点与 RFC6749 中多次描述的相同(授权)服务器,为什么在 oauth2 中有一个 refresh/access 令牌概念。
资源所有者在不共享凭据的情况下授权任何第三方组件时的第一个授权步骤,是 oauth2 的基本思想。使用授权令牌生成访问和刷新令牌只是另一种授权间接级别,但不会增加安全性。
由于授权服务器相同,访问令牌与授权令牌和刷新令牌一样敏感,因此我称之为不必要的复杂性。
对我来说唯一有意义的解释是,如果有人窃取了访问令牌,则客户端可以请求新的访问令牌。但是有人是怎么炼钢的呢?如果是中间人,那么他也有刷新令牌,当客户端请求一个新令牌时。
我的问题是:为什么授权服务器不只是 return 一个可以被客户端和资源所有者撤销的访问令牌? refresh/access代币策略有什么好处?
感谢您的解释。
刷新令牌试图解决服务器负载的细粒度访问检查。当资源所有者在调用之间缓存访问令牌以便它可以授权后续调用而无需转到授权服务器时,就会减少服务器负载。这大大减少了 authz 服务器上的负载。但这会带来一个问题,即令牌权限的更改,特别是令牌可用于的用途的减少,资源所有者在缓存访问令牌时永远不会看到。
现在,行为良好的资源所有者会知道在与授权服务器重新确认令牌之前,它应该只缓存令牌一小会儿。但是您不能指望资源所有者表现良好。因此,授权服务器对访问令牌设置了一个相对较短的到期时间。这会强制客户端使用刷新令牌来获取新的访问令牌。然后资源所有者将验证新的访问令牌并获得令牌的 current 权限。
请务必注意,无需用户交互即可刷新访问令牌。如果重新验证对于用户交互模型来说不是问题,则不需要刷新令牌,用户可以重新验证。但这有点糟糕。
这意味着如果用户要从他们的 OAuth 帐户中删除权限,资源所有者将继续使用旧的权限集,直到访问令牌过期。然后将获得新的访问令牌,新的权限集将生效。
除了 Neil 的出色回答:在只有一个令牌的情况下,您如何想象撤销该令牌会发生什么?这必然会涉及资源服务器 (RS) 咨询授权服务器 (AS),这是一个巨大的开销。这正是分裂存在的原因:短期访问令牌可以独立于 AS 的检查而独立存在。长期存在的刷新令牌协调访问权限与 AS。