Spring Security OAuthを使用して、別の承認サーバーと連携するようにリソースサーバーをセットアップしようとしています。 /check_token
エンドポイントが必要なRemoteTokenServices
を使用しています。
/oauth/check_token
を使用すると、@EnableAuthorizationServer
エンドポイントがデフォルトで有効になることがわかりました。ただし、デフォルトではエンドポイントにアクセスできません。
このエンドポイントをホワイトリストに登録するには、次のエントリを手動で追加する必要がありますか?
http.authorizeRequests().antMatchers("/oauth/check_token").permitAll();
これにより、すべてのユーザーがこのエンドポイントにアクセスできるようになります。これは望ましい動作ですか?それとも何か不足していますか?.
前もって感謝します、
必ず
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception
{
oauthServer.checkTokenAccess("permitAll()");
}
この詳細については::
いくつかの点を明確にし、Pratik Shah(および関連スレッドのAlex):
1-言及したconfigure
メソッドは、AuthorizationServerConfigurerAdapter
を拡張するクラスを作成することによってオーバーライドされます。
_ @EnableAuthorizationServer
@Configuration
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.inMemory()
.withClient("ger-client-id")
.secret("ger-secret")
.authorizedGrantTypes("password")
.scopes("read", "write");
}
}
_
2- AuthorizationServerConfigurer
Beanを含む_@EnableAuthorizationServer
_アノテーションを含めるときに、Spring Bootによって実行される自動構成を説明する このSpringガイド を読むことをお勧めします。上記のようにAuthorizationServerConfigurerAdapter
を拡張する構成Beanを作成すると、自動構成全体が無効になります。
3-自動構成が適切であり、_/oauth/check_token
_エンドポイントへのアクセスを操作したいだけの場合は、AuthorizationServerConfigurer
Beanを作成せずに(したがって、構成する必要なく)実行できます。プログラム的にすべて)。
_security.oauth2.authorization.check-token-access
_ファイルに_application.properties
_プロパティを追加する必要があります。次に例を示します。
_security.oauth2.client.client-id=ger-client-id
security.oauth2.client.client-secret=ger-secret
security.oauth2.client.scope=read,write
security.oauth2.authorization.check-token-access=permitAll()
_
もちろん、必要に応じてisAuthenticated()
値を指定できます。
ログレベルをDEBUGに設定して、すべてが期待どおりに構成されていることを確認できます。
_16:16:42.763 [main] DEBUG o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - Adding web access control expression 'permitAll()', for Ant [pattern='/oauth/check_token']
_
これらのプロパティに関するドキュメントはあまりありませんが、 この自動構成クラス から把握できます。
最後に言及する価値があることの1つは、最新のSpringバージョンでは修正されているようですが、 問題 を spring-security-oauth 事業;リクエストに末尾のスラッシュを追加すると、token_check機能がデフォルトで有効になるようです。
_$ curl localhost:8080/oauth/check_token/?token=fc9e4ad4-d6e8-4f57-b67e-c0285dcdeb58
{"scope":["read","write"],"active":true,"exp":1544940147,"authorities":["ROLE_USER"],"client_id":"ger-client-id"}
_
まず、構成トークンアクセス式:
@Override
public void configure(AuthorizationServerSecurityConfigurer securityConfigurer) throws Exception {
securityConfigurer
.allowFormAuthenticationForClients()
.checkTokenAccess("isAuthenticated()")
.addTokenEndpointAuthenticationFilter(checkTokenEndpointFilter());
}
次に、クライアント認証を処理するフィルターを定義する必要があります。
@Bean
public ClientCredentialsTokenEndpointFilter checkTokenEndpointFilter() {
ClientCredentialsTokenEndpointFilter filter = new ClientCredentialsTokenEndpointFilter("/oauth/check_token");
filter.setAuthenticationManager(authenticationManager);
filter.setAllowOnlyPost(true);
return filter;
}