【问题标题】:Why isn't OAuth2 client refreshing expired access_token?为什么 OAuth2 客户端不刷新过期的 access_token?
【发布时间】:2015-09-10 04:08:51
【问题描述】:

我有一个配置了@EnableOAuth2Sso@EnableZuulProxy 的客户端应用程序,以及一个配置了@EnableOAuth2Resource 的资源服务器(单独的应用程序)。我可以看到客户端正确地使用Authorization: Bearer {access_token here}向资源服务器进行身份验证,但是一旦访问令牌过期,代理的资源服务器请求就会永久失败。

[已编辑]

我通过提供自定义 RemoteTokenServices bean 修改了我的资源服务器,该 bean 使用 OpenAM 的 /tokeninfo 端点来决定 access_token 是否仍然有效。 (Spring 提供的 RemoteTokenServices bean 尝试 POST,它从 OpenAM 获得 405)。当我检测到 access_token 无效时,我从my.spring.oauth2.OpenAMRemoteTokenServices#loadAuthentication 抛出 InvalidTokenException。现在,在 access_token 过期的情况下,我的资源服务器(我认为是正确的)在响应中向客户端发送 HTTP 401。

但客户端并未尝试刷新令牌。

也许我的心智模型是错误的。我希望客户端在 access_token 过期的情况下自动使用 refresh_token 来获取一个新的。我不知道我是否认为它应该主动刷新 access_token(在到期时间之前的某个 epsilon 内),或者等待下游请求失败并尝试刷新。但我的客户似乎什么都没做,我不知道为什么不做。

【问题讨论】:

  • 我可以看到org.springframework.cloud.security.oauth2.resource.UserInfoTokenServices#getMap(在客户端)正在使用信息量较少的访问令牌设置(替换)上下文中的 access_token。替换令牌仅包含不透明字符串令牌值,而它正在替换的令牌包含过期和刷新令牌。还没有弄清楚为什么令牌被替换为包含相同的不透明字符串的不太完整的令牌。
  • 嗨,这听起来正是我遇到的问题。我想授予短期访问令牌并让 zuul 代理在用户会话期间使用刷新令牌。你有任何进展吗?
  • @WillFaithfull 对不起,不,我从来没有想过这个问题,现在可能应该已经删除了这个问题。很抱歉对您没有帮助。
  • 我确实得到了这个工作。我的 zuul 代理 SSO 应用程序中有两个问题 - 我需要 DefaultTokenServices bean 来拥有 tokenServices.setSupportRefreshToken(true),并且我需要在上下文中定义一个 OAuth2RestOperations bean 以便它可以实际发出请求。从那里开始的问题与我的授权服务器有关。我不确定这是否构成问题的答案,或者它是否甚至是同一个问题。

标签: spring-security-oauth2


【解决方案1】:

正如这个 git 问题中所述:https://github.com/spring-guides/tut-spring-security-and-angular-js/issues/140,该问题可能与以下事实有关:在 Spring Boot 1.4 及更高版本中,缺少处理访问令牌下游服务的 Zuul 过滤器 (org.springframework.cloud.security.oauth2.proxy.OAuth2TokenRelayFilter) OAuth2RestTemplate 类型的 bean,过滤器本身使用它来在访问令牌过期时自动处理 refresh_token 授权。

我遇到了同样的问题,我通过在配置类中添加以下 bean 来解决它:

@Configuration
public class ZuulConfiguration {
    @Bean
    protected OAuth2RestTemplate oauth2RestTemplate(OAuth2ProtectedResourceDetails resource, 
        OAuth2ClientContext context) {

        return new OAuth2RestTemplate(resource, context);
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2018-03-15
    • 1970-01-01
    • 2019-10-18
    • 2016-07-27
    相关资源
    最近更新 更多