我正在使用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;
}
答案 0 :(得分:1)
这是因为4.4.3. Access Token Response(OAuth 2.0授权框架)中的“RFC 6749”说明如下:
如果访问令牌请求有效且已获得授权,则授权服务器会发出访问令牌,如第5.1节所述。 不应包含刷新令牌。如果请求未通过客户端身份验证或无效,授权服务器将返回错误响应,如第5.2节所述。
简而言之, Client Credentials Flow不应发出刷新令牌。 Spring符合要求。