2017-04-23 13 views
0

1つのResourceServerから別のResourceServerに通信中にトークンリレーに関する問題が発生しました。スプリングセキュリティOAuth2 JWTトークンリレーの問題

My AuthServerはDave Sayerのサンプルに基づいており、これはリソースserver1のapplication.ymlです。

security: 
user: 
    password: none 
    oauth2: 
    client: 
     accessTokenUri: http://localhost:9999/uaa/oauth/token 
     userAuthorizationUri: http://localhost:9999/uaa/oauth/authorize 
     clientId: trusted 
     clientSecret: secret 

configが、ここで

iは、リソースSERVER1にOAuth2RestTemplateを作成していますどのように異なるのclientIdを使用していることを除いて、リソースサーバー2で非常によく似ています。

@LoadBalanced 
@Bean 
@Autowired 
public OAuth2RestTemplate loadBalancedOauth2RestTemplate(OAuth2ClientContext oauth2ClientContext, 
                 OAuth2ProtectedResourceDetails details) { 
    return new OAuth2RestTemplate(details, oauth2ClientContext); 
} 

この呼び出しには、JWT OAuth2トークンリレーが必要ですが、おそらく起こっていません。

これはポストマンRestClientからこのエンドポイント/test-relayを呼び出し中に私が得る例外です。私はJWTトークンを認証ヘッダーに指定しています。

org.springframework.security.oauth2.client.resource.UserRedirectRequiredException: A redirect is required to get the users approval 
at org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.getRedirectForAuthorization(AuthorizationCodeAccessTokenProvider.java:359) 
at org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.obtainAccessToken(AuthorizationCodeAccessTokenProvider.java:205) 
at org.springframework.security.oauth2.client.token.AccessTokenProviderChain.obtainNewAccessTokenInternal(AccessTokenProviderChain.java:148) 
at org.springframework.security.oauth2.client.token.AccessTokenProviderChain.obtainAccessToken(AccessTokenProviderChain.java:121) 
at org.springframework.security.oauth2.client.OAuth2RestTemplate.acquireAccessToken(OAuth2RestTemplate.java:221) 
at org.springframework.security.oauth2.client.OAuth2RestTemplate.getAccessToken(OAuth2RestTemplate.java:173) 
at org.springframework.security.oauth2.client.OAuth2RestTemplate.createRequest(OAuth2RestTemplate.java:105) 
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:648) 
at org.springframework.security.oauth2.client.OAuth2RestTemplate.doExecute(OAuth2RestTemplate.java:128) 

私はSpring Boot 1.5.2/3を使用しています。私のリソースサーバーはUIサーバーでもあり、Webブラウザを使用してURLにアクセスするとこの呼び出しが正常に機能します。

UPDATE-1

この問題は、それだけに存在@EnableOAuth2SsoアノテーションであまりにすなわちUIサーバーであるリソースサーバのため発生します。 @EnableOAuth2Ssoを持たない純粋なリソースサーバーの場合、トークンリレーは正常に動作します。

答えて

0

報告したバグの影響を受ける可能性がありますhttps://github.com/spring-cloud/spring-cloud-security/issues/123。この回避策が役立つかどうかを確認してください。

@Configuration 
public class WorkaroundConfig extends WebMvcConfigurerAdapter { 

    @Autowired 
    @Qualifier("tokenRelayRequestInterceptor") 
    HandlerInterceptor handlerInterceptor; 

    @Override 
    public void addInterceptors (InterceptorRegistry registry) { 
     registry.addInterceptor(handlerInterceptor); 
    } 

} 
+0

この回避策は今のところ私の問題を解決しました。助けてくれてありがとう。リソースサーバーとしてuiサーバーを公開するのもよい方法ですか? –

+0

こんにちは私は、UIをリソースサーバーにしても大丈夫だと思います –

関連する問題