调用refresh_token不会刷新令牌

时间:2016-10-26 09:46:30

标签: spring oauth oauth-2.0 spring-oauth2 spring-cloud-security

Flow就像这样:

  1. 我们在列出的特定资源ID中注册了oauth应用,因此此应用可以访问这些
  2. 一段时间后,需要添加另一个资源ID,因为我们正在扩展客户端应用程序的功能
  3. 客户端应用程序不时会刷新令牌,这可能是由于错误或access_token过期造成的。
  4. 在新的access_token上使用check_token为我们提供了一组旧资源ID。似乎它取自某些缓存或旧令牌本身。
  5. 问题: 不应该刷新令牌刷新资源ID吗?这是不是oauth rfc(无法找到关于这个特殊情况的任何内容)?

    我们当然可以撤销oauth应用程序的所有令牌,但这需要我们所有用户再次登录我们想要避免的。

    我不确定它是否与spring spring security相关,或者更确切地说是oAuth本身。 ç

1 个答案:

答案 0 :(得分:1)

此答案假设您的资源标识符与OAuth2描述的作用域相同,而不是说明其用途似乎非常相似 - 限制访问令牌的范围。

当发出访问令牌刷新请求时,规范声明您可以包含scope参数,但是:

  

第3.3节描述的访问请求的范围。 请求的范围绝不能包括资源所有者最初未授予的任何范围,如果省略则视为等于资源所有者最初授予的范围。

此外,作为响应的一部分,可以发出新的刷新令牌,但是:

  

授权服务器可以发出新的刷新令牌(...)如果发出新的刷新令牌,则刷新令牌范围必须与请求中客户端包含的刷新令牌的范围相同。 /强>

(重点是我的,section 6. of the specification

这意味着,根据规范,自动向访问令牌添加新范围/资源是不合规的。但是,您不需要注销用户,您只需要请求资源所有者同意新范围。

同样,这是规范陈述的范围,它似乎与您的使用场景相匹配。但是,在某些情况下,这不会严格适用或最终没有真正的影响。如果单个组织控制授权服务器和客户端应用程序,它可以决定某个应用程序享受某些时间称为管理同意的内容,基本上资源所有者未被要求明确同意,因为这是一个受信任的应用程序。在这些情况下,您可以在不进行任何类型的用户干预的情况下增加范围/资源。