我试图控制客户可以在Spring Security OAuth2.0中生成访问令牌的内容。
我希望只允许一个客户端生成访问令牌(访问/oauth/authorize
,/oauth/token
)以及所有其他客户端以验证它们。
文档说我应该使用标准的Spring Security WebSecurityConfigurer
来实现这样的访问粒度。但是,我所做的所有配置都不会影响对端点的访问。
我尝试了以下配置,只允许客户mgmt
生成令牌:
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.inMemory()
.withClient("mgmt")
.secret("pass")
.authorities("ROLE_WRITE")
.and()
.withClient("resource")
.secret("pass")
.authorities("ROLE_READ");
}
}
@Configuration
public class EndpointAuthorizationConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.requestMatchers().antMatchers("/oauth/token")
.and()
.authorizeRequests()
.antMatchers("/oauth/token")
.hasAuthority("ROLE_WRITE")
.and()
.httpBasic();
}
}
我还尝试在EndpointAuthorizationConfig
课程中再次定义用户,但这没有帮助。客户端resource
仍然可以访问这些端点。
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("mgmt")
.password("pass")
.roles("WRITE");
}