spring-security-oauth2プロジェクトが承認サーバーとしてのクラスでスムーズに実行されています。
client-ids、user-tokens、refresh-tokensはすべてデータベースによって管理されます。
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
private static String REALM = "MY_OAUTH_REALM";
...
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.realm(REALM + "/client");
}
}
Configureメソッドが何をしているのかわからないことを除いて、すべてが正常に機能しています。完全なメソッドを削除しても、oauth2プロセスは正常に機能します。
このコンテキストでのconfigureメソッドの主な用途は何ですか?また、ここで設定されている領域は何ですか?
それを理解するのを手伝ってください。
ありがとう。
configure
メソッドの目的AuthorizationServerConfigurerAdapter
には3つのconfigure(...)
メソッドがあり、3つすべてをオーバーライドでき、それらは異なる目的を果たします。
あなたの質問では、1つだけ引用しました。
それらの目的は、承認サーバーのエンドポイント、クライアント、およびセキュリティのカスタム設定を提供することです。したがって、いくつかの事前定義されたデフォルト設定があるので、オーバーライドしたい数はあなた次第です。
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
// This can be used to configure security of your authorization server itself
// i.e. which user can generate tokens , changing default realm etc.
// Sample code below.
// We're allowing access to the token only for clients with 'ROLE_TRUSTED_CLIENT' authority.
// There are few more configurations and changing default realm is one of those
oauthServer
.tokenKeyAccess("hasAuthority('ROLE_TRUSTED_CLIENT')")
.checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
// Here you will specify about `ClientDetailsService`
// i.e. information about OAuth2 clients & where their info is located - memory , DB , LDAP etc.
// Sample code below.
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
// This can be used to configure security of your authorization server itself
// i.e. which user can generate tokens , changing default realm etc - Sample code below.
// we're allowing access to the token only for clients with 'ROLE_TRUSTED_CLIENT' authority.
// There are few more configurations and changing default realm is one of those
oauthServer
.tokenKeyAccess("hasAuthority('ROLE_TRUSTED_CLIENT')")
.checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
// Here you will specify about `ClientDetailsService` i.e.
// information about OAuth2 clients & where their info is located - memory , DB , LDAP etc.
// Sample code below
clients.inMemory()
.withClient("trusted-app")
.authorizedGrantTypes("client_credentials", "password", "refresh_token")
.authorities("ROLE_TRUSTED_CLIENT")
.scopes("read", "write")
.resourceIds("oauth2_id")
.accessTokenValiditySeconds(10000)
.refreshTokenValiditySeconds(20000)
.secret("secret");
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
// Here you will do non-security configs for end points associated with your Authorization Server
// and can specify details about authentication manager, token generation etc. Sample code below
endpoints
.authenticationManager(this.authenticationManager)
.tokenServices(tokenServices())
.tokenStore(tokenStore())
.accessTokenConverter(accessTokenConverter());
}
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(accessTokenConverter());
}
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey("abcd");
return converter;
}
@Bean
@Primary
public DefaultTokenServices tokenServices() {
DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
defaultTokenServices.setTokenStore(tokenStore());
defaultTokenServices.setSupportRefreshToken(true);
defaultTokenServices.setTokenEnhancer(accessTokenConverter());
return defaultTokenServices;
}
@EnableAuthorizationServer
Javadocの説明は、前の回答ですでに提供されています。
素人の言語では、これはトークン生成エンドポイントを設定することです。つまり、プロパティを指定する場合はsecurity.oauth2.client.client-id
およびsecurity.oauth2.client.client-secret
、Springは認証サーバーを提供し、エンドポイントで標準のOauth2トークンを提供します/oauth/token
実際のシナリオでは、これが意味するのは、エンタープライズユーザーLDAPまたはユーザーデータベースの上にトークン生成Webアプリケーション(レイヤー7)をセットアップし、通常はコンシューマー側アプリ(APIなど)とは別のアプリケーションであるということです。
@ EnableAuthorizationServer のJavaDocコメントを見ると、次のようになっていることがわかります。
承認サーバーを有効にするための便利なアノテーション(つまり、現在のアプリケーションコンテキストのAuthorizationEndpointとTokenEndpoint。これはDispatcherServletコンテキストである必要があります。サーバーの多くの機能は、AuthorizationServerConfigurerタイプの@Beansを使用してカスタマイズできます(たとえば、AuthorizationServerConfigurerAdapterを拡張します。ユーザーは通常のSpringSecurity機能(EnableWebSecurity @EnableWebSecurityなど)を使用して承認エンドポイント(/ oauth/authorize)を保護する責任がありますが、トークンエンドポイント(/ oauth/token)は、クライアントの資格情報でHTTPBasic認証を使用して自動的に保護されます。 1つ以上のAuthorizationServerConfigurersを介してClientDetailsServiceを提供することによって登録されます。
AuthorizationServerConfigurerAdapter
の拡張は、承認サーバーのカスタマイズにのみ使用されます。 Beanクラスに@EnableAuthorizationServer
アノテーションを付けるだけで、SpringSecurity内で機能するAuthorizationServerを簡単にセットアップできます。