2017-09-07 2 views
1

OAuth2 보호 자원 서버에 대한 요청을 만들기 위해 Spring RestTemplate을 사용하고 있습니다. 아래는 RESTTemplate을 초기화하는 코드입니다. 기본적으로RestTemplate POST 대신 GET 요청을 통해 OAuth2 요청 액세스 토큰

ResourceOwnerPasswordResourceDetails resourceDetails = new ResourceOwnerPasswordResourceDetails(); 
resourceDetails.setUsername(userName); 
resourceDetails.setPassword(password); 
resourceDetails.setAccessTokenUri(root + accessTokenURI); 
resourceDetails.setClientId(clientId); 
resourceDetails.setClientSecret(clientSecret); 
resourceDetails.setGrantType(grantType); 
resourceDetails.setScope(Arrays.asList(scope)); 

DefaultOAuth2ClientContext clientContext = new DefaultOAuth2ClientContext(); 

RestTemplate rest = new OAuth2RestTemplate(resourceDetails, clientContext); 

RestTemplate는 인증 서버에서 access_token를 얻을 수 POST 요청을 사용합니다. 고유 한 요구 사항이 있습니다. RestTemplatePOST 대신 access_token을 얻으려면 GET을 사용하고 싶습니다. 이 동작을 수정할 수있는 구성이 있습니까?

답변

3

spring-security-oauth 프로젝트의 내부를보고 해결책을 찾았습니다. ResourceOwnerPasswordAccessTokenProvider 클래스를 재정의해야하며 AccessTokenProvider으로 설정하고 OAuth2RestTemplate 클래스 내에 설정하십시오. 그것이 어떻게되는지 설명합니다.

package com.acme; 

import org.springframework.http.HttpMethod; 

public class ResourceOwnerPasswordAccessTokenProvider extends org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider { 

    @Override 
    protected HttpMethod getHttpMethod() { 
    return HttpMethod.GET; 
    } 
} 

하고 초기화 OAuth2RestTemplate

ResourceOwnerPasswordResourceDetails resourceDetails = new ResourceOwnerPasswordResourceDetails(); 
resourceDetails.setUsername(userName); 
resourceDetails.setPassword(password); 
resourceDetails.setAccessTokenUri(root + accessTokenURI); 
resourceDetails.setClientId(clientId); 
resourceDetails.setClientSecret(clientSecret); 
resourceDetails.setGrantType(grantType); 
resourceDetails.setScope(Arrays.asList(scope)); 

DefaultOAuth2ClientContext clientContext = new DefaultOAuth2ClientContext(); 

OAuth2RestTemplate rest = new OAuth2RestTemplate(resourceDetails, clientContext); 

// Set the overridden ResourceOwnerPasswordAccessTokenProvider class instance to OAuth2RestTemplate 
AccessTokenProvider accessTokenProvider = new com.acme.ResourceOwnerPasswordAccessTokenProvider(); 
rest.setAccessTokenProvider(accessTokenProvider); 
관련 문제