2017-09-07 7 views
1

私はSpring RestTemplateを使用してOAuth2保護リソースサーバーに対するリクエストを行います。以下は、RESTTemplateを初期化するコードです。デフォルトでRestTemplate OAuth2はPOSTの代わりにGETリクエストを使用してアクセストークンをリクエストします

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要求を使用しています。私はユニークな要件を持っています。 POSTではなくaccess_tokenを取得するためにRestTemplateGETを使用します。この動作を変更するための設定はありますか?

答えて

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); 
関連する問題