2016-11-03 1 views
0

우리가 봄 부팅 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 흐름에 맞게 나머지 템플릿을 올바르게 구성하는 방법에 대한 의견이 있으십니까?

건배, 벤

답변

1

나는 지금 같은 문제에 붙어. 내 솔루션은 내 ResourceDetails 빈에 대해 명명 된 bean을 사용하고 @Qualifier를 사용하여 나머지 템플리트 (oAuth2RestTemplate 메소드의 매개 변수에서 사용자의 경우)를 작성할 때 적절한 것을 주입하는 것입니다.

1.4.0과 1.4.1 사이의 버전 업그레이드를 통해이 문제의 정확한 원인을 알면 좋을 것입니다.

+0

또한 유효한 해결책 인 것 같습니다. 나는 당신이 더러운 방식으로 말할 수 있었고 인터페이스의 유형 (OAuth2ProtectedResourceDetails)이 아니라 실제로 구현 된 인스턴트 메신저 (ClientCredentialsResourceDetails) 이후의 구체적인 구현체를 autowiring 할 수 있다고 생각했다. 아마 OAuth2ProtectedResourceDetailsConfiguration을 제외 할 수 있었을 것이다. @EnableAutoConfiguration (exclude = OAuth2ProtectedResourceDetailsConfiguration .class)과 같은 자동 구성 메커니즘에 의해 선택됩니다. 그래도 여전히 호기심이있는 '나는'올바른 방법. – jimonthebarn

1

나는 같은 문제로 어려움을 겪고있었습니다. 그러나, 나는 발견 당신과 함께 주석 @의 EnableOAuth2Client 주석을 추가하는 경우 : client_credentials

=

security.oauth2.client.grant 형이 적절한 주입 ClientCredentialsResourceDetails가 AuthorizationCodeResourceDetails보다는 인스턴스를 자세히 얻을. 또한 OAuth2ProtectedResourceDetailsConfiguration을 제외하려고 시도해도 작동하지 않습니다. 패키지 개인 클래스입니다. 이름으로 제외 시키려고하면 자동 구성 클래스가 아니라는 오류가 표시됩니다. OAuth2RestOperationsConfiguration 클래스의 코드를 살펴 보자. 이는 security.oauth2.client 접두어 내에서 속성을 검사 할 때 할당 할 자원을 결정합니다.