OAuth を使用したアプリケーションがあります。認証には、アクセス トークンの取得、提供されたアクセス トークンを使用したリクエストの 2 つのステップが含まれます。
https://localhost.com/api/endpoint?client_id=xxxx&client_secret=yyyyのようなリクエスト パラメータとして提供されたクライアント ID とクライアント シークレットによるアクセスを提供するように Spring セキュリティを構成することは可能ですか?
OAuth を使用したアプリケーションがあります。認証には、アクセス トークンの取得、提供されたアクセス トークンを使用したリクエストの 2 つのステップが含まれます。
https://localhost.com/api/endpoint?client_id=xxxx&client_secret=yyyyのようなリクエスト パラメータとして提供されたクライアント ID とクライアント シークレットによるアクセスを提供するように Spring セキュリティを構成することは可能ですか?
答えはいつものように簡単です。
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.tokenGranter(new CompositeTokenGranter(
Arrays.asList(resourceOwnerPasswordTokenGranter(), clientCredentialsTokenGranter())))
.authenticationManager(providerManager())
.clientDetailsService(clientDetailsService())
.tokenServices(defaultTokenServices());
}
private TokenGranter resourceOwnerPasswordTokenGranter() {
return new ResourceOwnerPasswordTokenGranter(
new ProviderManager(Arrays.asList(authenticationProvider())),
defaultTokenServices(),
clientDetailsService(),
defaultOAuth2RequestFactory());
}
private TokenGranter clientCredentialsTokenGranter() {
return new ClientCredentialsTokenGranter(
defaultTokenServices(),
clientDetailsService(),
defaultOAuth2RequestFactory());
}
ResourceOwnerPasswordTokenGranter (clientId+clientPassword+username+password による認証用) と ClientCredentialsTokenGranter (clientId+clientPassword による認証用) の 2 つのグランターのリストを含む新しい CompositeTokenGranter を追加しました。
編集
私の質問が間違っていたようです。これにつきましては申し訳ございません。認可サーバーにその変更を加えました。したがって、/oauth/token のみで機能します。質問の問題を修正する方法は今のところわかりませんが、解決策が見つかったらこの質問を更新します.