우리가 봄 부팅 1.4.0와 아주 잘 작동 장소에서 우리의 OAuth2를 클라이언트에 대한 다음과 같은 클라이언트 구성 : 봄 부팅 1.4.1 I로 업데이트 한 후구성 봄 OAuth2를 클라이언트 흐름
@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;
}
}
OAuth2RestTemplate을 autowiring 할 때 OAuth2ProtectedResourceDetails의 또 다른 구현이 우위를 차지한다는 사실을 발견했다. (org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ProtectedResourceDetailsConfiguration - AuthorizationCodeResourceDetails의 빈을 프라이 머리로 표시하는 자동 설정으로 인해) ClientCredentialsResourceDetails를 입력하십시오.
나머지 템플릿 빈에 대한 resourceDetails 및 clientContext를 autowiring하지 않고 구체적인 구현을 직접 제공하지 않아도이를 해결할 수 있다는 것을 알고 있지만 스프링에 의해 의도되지 않은 방식으로 나머지 템플릿을 구성하는지 궁금합니다. 팀?
client_credentials 흐름에 맞게 나머지 템플릿을 올바르게 구성하는 방법에 대한 의견이 있으십니까?
건배, 벤
또한 유효한 해결책 인 것 같습니다. 나는 당신이 더러운 방식으로 말할 수 있었고 인터페이스의 유형 (OAuth2ProtectedResourceDetails)이 아니라 실제로 구현 된 인스턴트 메신저 (ClientCredentialsResourceDetails) 이후의 구체적인 구현체를 autowiring 할 수 있다고 생각했다. 아마 OAuth2ProtectedResourceDetailsConfiguration을 제외 할 수 있었을 것이다. @EnableAutoConfiguration (exclude = OAuth2ProtectedResourceDetailsConfiguration .class)과 같은 자동 구성 메커니즘에 의해 선택됩니다. 그래도 여전히 호기심이있는 '나는'올바른 방법. – jimonthebarn