无法使用Spring ClientCredentialsResourceDetails刷新令牌

时间:2017-10-31 07:46:30

标签: spring spring-security oauth

我正在使用ClientCredentialsResourceDetails来设置我的OAuth2RestTemplate对象。

我的OAuth2启用api在响应中向我发送了refresh_token,可用于刷新访问令牌。

但是,Spring没有为ClientCredentialsResourceDetails对象实现令牌刷新,因为可以看到here

有没有办法让令牌刷新工作或我做错了什么?

仅供参考,这是我的oauth beans春季代码

@Bean
@Primary
public OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails() {
    final ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
    resourceDetails.setClientId(clientKey);
    resourceDetails.setClientSecret(clientSecret);

    final URI accessTokenUri = UriComponentsBuilder.newInstance()
            .host(host)
            .path(tokenUrlPath)
            .scheme(scheme)
            .build()
            .toUri();

    resourceDetails.setAccessTokenUri(accessTokenUri.toString());
    resourceDetails.setClientAuthenticationScheme(AuthenticationScheme.header);

    return resourceDetails;
}

@Bean
public OAuth2RestTemplate oAuth2RestTemplate(
        OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails
) {
    final OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(oAuth2ProtectedResourceDetails);
    oAuth2RestTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
    return oAuth2RestTemplate;
}

1 个答案:

答案 0 :(得分:1)

这是因为4.4.3. Access Token Response(OAuth 2.0授权框架)中的“RFC 6749”说明如下:

  

如果访问令牌请求有效且已获得授权,则授权服务器会发出访问令牌,如第5.1节所述。 不应包含刷新令牌。如果请求未通过客户端身份验证或无效,授权服务器将返回错误响应,如第5.2节所述。

简而言之, Client Credentials Flow不应发出刷新令牌。 Spring符合要求。