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
を持たない純粋なリソースサーバーの場合、トークンリレーは正常に動作します。
この回避策は今のところ私の問題を解決しました。助けてくれてありがとう。リソースサーバーとしてuiサーバーを公開するのもよい方法ですか? –
こんにちは私は、UIをリソースサーバーにしても大丈夫だと思います –