我不清楚,如果端点是RFC6749中多次描述的相同(授权)服务器,为什么oauth2中存在刷新/访问令牌概念。
资源所有者在不共享凭据的情况下授权任何第三方组件的第一个授权步骤是 oauth2的基本概念。使用授权令牌生成访问和刷新令牌只是另一级别的授权间接imho,但没有增加安全性。
由于授权服务器是相同的,访问令牌与授权令牌和刷新令牌一样敏感,因此我称之为不必要的复杂性。
唯一对我有意义的解释是,如果有人偷走了访问令牌,则客户端可以请求新的访问令牌。但有人怎么加钢呢?如果它是中间的人,那么当客户请求新的时,他也有刷新令牌。
我的问题是:为什么授权服务器不仅仅返回一个可以被客户端和资源所有者撤销的访问令牌?刷新/访问令牌策略有什么好处?
感谢您的解释。
答案 0 :(得分:6)
刷新令牌是尝试使用服务器负载解决细粒度访问检查。当资源所有者在调用之间缓存访问令牌以便它可以授权后续调用而无需转到授权服务器时,会减少服务器负载。这大大减少了authz服务器上的负载。但是这引入了一个问题,即令牌的权限发生了变化,特别是减少了令牌的用途,资源所有者从不会看到它正在缓存访问令牌。
现在,一个表现良好的资源所有者会知道它应该只保留令牌一会儿,然后再用授权服务器重新确认它。但是你不能依赖资源所有者表现得很好。因此,授权服务器对访问令牌进行相对较短的到期。这会强制客户端使用刷新令牌来获取新的访问令牌。然后,资源所有者将验证新的访问令牌并获取令牌的当前权限。
请务必注意,无需用户交互即可刷新访问令牌。如果重新认证对于用户交互模型不是问题,则不需要刷新令牌,用户可以重新进行身份验证。但那会很糟糕。
这意味着,如果用户要从其OAuth帐户中删除权限,则资源所有者将继续使用旧权限集运行,直到访问令牌过期。然后将获取新的访问令牌,新的权限集将生效。
答案 1 :(得分:1)
除了Neil的好答案之外:如果只有一个令牌,你怎么想象撤销该令牌会发生什么?这必然涉及资源服务器(RS)咨询授权服务器(AS),这是一个巨大的开销。这正是分裂存在的原因:短期访问令牌可以独立于AS上的检查而独立存在。长期刷新令牌与AS协调访问权限。