【问题标题】:OAuth2RestTemplate doesnt refresh the token after it expiredOAuth2RestTemplate 过期后不刷新令牌
【发布时间】:2020-02-10 13:43:19
【问题描述】:

我正在使用 Spring OAuth2RestTemplate,并且令牌在过期后不会刷新。下面是我的令牌提供者。我错过了什么?任何指针都会有帮助。

@Bean
        public AccessTokenProvider clientAccessTokenProvider() {
            ClientCredentialsAccessTokenProvider accessTokenProvider = new ClientCredentialsAccessTokenProvider();
            accessTokenProvider.setRequestFactory(getClientHttpRequestFactory());
            return accessTokenProvider;
        }

【问题讨论】:

  • 如果令牌响应(尤其是 expires_in)不是默认格式,就会发生这种情况。你确认了吗?
  • 您使用的是哪个版本的 Spring Boot?
  • org.springframework.security.oauth:spring-security-oauth2 是 OAuthClient 和 sprinboot 版本:2.1.8.RELEASE
  • @Abbin 默认格式是毫秒

标签: spring-boot oauth-2.0


【解决方案1】:

根据 Spring Boot oAuth 实现,ClientCredentialsAccessTokenProvider 不支持“刷新令牌”。

我通过检查过期时间并将 oAuthContext 中的令牌设置为 null 来解决问题,然后再进行其余调用。

  private void checkTokenExpiry() {
        OAuth2ClientContext oAuth2ClientContext = oAuth2RestOperations.getOAuth2ClientContext();
        if (oAuth2ClientContext == null) {
            return;
        }
        OAuth2AccessToken accessToken = oAuth2ClientContext.getAccessToken();
        if (accessToken != null && (accessToken.getExpiresIn() > 5000 || accessToken
            .isExpired())) { //5 seconds
            log.info("Token expired");
            oAuth2RestOperations.getOAuth2ClientContext()
                .setAccessToken(null); //to re-fetch the token
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2020-02-10
    • 2018-02-10
    • 2021-12-19
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多