【发布时间】:2017-03-17 08:29:44
【问题描述】:
我们为我们的 oauth2 客户端准备了以下客户端配置,这些配置与 spring boot 1.4.0 配合得很好:
@Configuration
@ConfigurationProperties(prefix = "pmc.oauth.client")
public class OAuthClientConfig {
@NotNull
private String scope;
@NotNull
private String clientSecret;
@NotNull
private String clientId;
@NotNull
private String accessTokenUri;
private int clientReadTimeout = 60000;
private int clientConnectTimeout = 60000;
@Bean
public OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails() {
ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
resourceDetails.setAccessTokenUri(accessTokenUri);
resourceDetails.setClientId(clientId);
resourceDetails.setClientSecret(clientSecret);
resourceDetails.setScope(Collections.singletonList(scope));
return resourceDetails;
}
@Bean
public OAuth2ClientContext oauth2ClientContext() {
DefaultOAuth2ClientContext defaultOAuth2ClientContext = new DefaultOAuth2ClientContext();
return defaultOAuth2ClientContext;
}
@Bean
public OAuth2RestTemplate oAuth2RestTemplate(OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails, OAuth2ClientContext oauth2ClientContext) {
OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(oAuth2ProtectedResourceDetails, oauth2ClientContext);
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
restTemplate.setRequestFactory(factory);
return restTemplate;
}
}
更新到 Spring-Boot 1.4.1 后,我注意到在自动装配 OAuth2RestTemplate 时,OAuth2ProtectedResourceDetails 的另一个实现优先(由于 org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ProtectedResourceDetailsConfiguration - 自动配置标记AuthorizationCodeResourceDetails 的 bean 作为主要的)在我们自己定义的 ClientCredentialsResourceDetails 类型的 bean 之上。
我知道我可以通过不为 rest 模板 bean 自动装配 resourceDetails 和 clientContext 并直接提供具体实现来解决这个问题,但我只是想知道我们是否正在以 Spring 团队不打算的方式配置我们的 rest 模板?
关于如何为 client_credentials 流正确配置我们的 rest 模板有什么想法吗?
干杯, 本
【问题讨论】:
标签: spring-boot spring-security-oauth2