控制对Spring Security OAuth2端点的访问

时间:2015-05-27 16:34:14

标签: spring-boot spring-security-oauth2

我试图控制客户可以在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");
}

0 个答案:

没有答案