我有一个 spring-security-oauth2 项目,该项目作为授权服务器顺利运行。
client-id,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");
}
}
一切正常,但我不知道配置方法在做什么。即使我删除了完整的方法, oauth2 进程仍然可以正常工作。
在这种情况下,configure方法的主要用途是什么?这里设置的是什么领域?
请帮助我理解它。
感谢。
答案 0 :(得分:5)
configure
方法的目的 AuthorizationServerConfigurerAdapter
有三种configure(...)
方法,这三种方法都可以被覆盖,并且这些方法有不同的用途。
在你的问题中,你只引用了一个。
他们的目的是为Authorization Server端点,客户端和客户端提供自定义设置。安全。因此,由于存在一些预定义的默认设置,因此您需要覆盖多少。
@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将为您提供身份验证服务器,在端点/oauth/token
提供标准Oauth2令牌
在实际情况中,这意味着您在企业用户LDAP或用户数据库之上设置令牌生成Web应用程序(第7层),并且通常是与客户端应用程序(API)分开的应用程序等)。
答案 1 :(得分:1)
如果您查看@EnableAuthorizationServer的JavaDoc评论,可以看到它说明了以下内容;
启用授权服务器的便捷注释(即 AuthorizationEndpoint和当前应用程序中的TokenEndpoint context,必须是DispatcherServlet上下文。许多功能 可以使用@Beans类型自定义服务器 AuthorizationServerConfigurer(例如通过扩展 AuthorizationServerConfigurerAdapter。用户负责 使用正常保护授权端点(/ oauth / authorize) Spring Security功能(EnableWebSecurity @EnableWebSecurity 等),但令牌端点(/ oauth / token)将自动进行 使用客户端凭据上的HTTP基本身份验证进行保护。 必须通过提供ClientDetailsService来注册客户端 一个或多个AuthorizationServerConfigurers。
扩展AuthorizationServerConfigurerAdapter
仅用于自定义授权服务器。通过使用@EnableAuthorizationServer