如何覆盖Spring Boot默认的OAuthTokenEndpoint

时间:2014-07-23 20:30:47

标签: spring-security spring-boot spring-security-oauth2

我一直致力于使用Spring Security Oauth保护Restful Service。我一直在试图使用SSL保护/ oauth / token端点并且只允许POST调用。

我正在使用声明

的@EnableAuthorizationServer
  

启用授权服务器的便捷注释(即   当前应用程序中的AuthorizationEndpoint和TokenEndpoint)   context,必须是DispatcherServlet上下文。许多功能   可以使用@Beans类型自定义服务器   AuthorizationServerConfigurer(例如通过扩展   AuthorizationServerConfigurerAdapter)。用户负责   使用正常保护授权端点(/ oauth / authorize)   Spring Security功能(@EnableWebSecurity等),但令牌   端点(/ oauth / token)将使用HTTP Basic自动保护   验证客户端的凭据。客户必须注册   通过一个或多个提供ClientDetailsS​​ervice   AuthorizationServerConfigurers。

哪个好,但我似乎无法覆盖令牌端点块或强制执行仅POST调用,例如使用intercept-url xml语法

@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    @Bean
    public TokenStore tokenStore() {
        return new InMemoryTokenStore()
    }

    @Autowired
    AuthenticationManager authenticationManager

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints
                .tokenStore(tokenStore())
                .authenticationManager(authenticationManager);

    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
                .inMemory()
                .withClient('testApp')
                .scopes("read", "write")
                .authorities('ROLE_CLIENT')
                .authorizedGrantTypes("password","refresh_token")
                .secret('secret')
                .accessTokenValiditySeconds(7200)

    }
}

我使用

保护了我的资源服务器
@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

    @Autowired
    private RestAuthenticationEntryPoint authenticationEntryPoint;


    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .exceptionHandling()
                    .authenticationEntryPoint(authenticationEntryPoint)
                .and()
                    .requiresChannel().anyRequest().requiresSecure()
                .and()
                    .csrf()
                    .requireCsrfProtectionMatcher(new AntPathRequestMatcher("/oauth/authorize"))
                    .disable()
                .headers()
                    .frameOptions().disable()
                    .sessionManagement()
                    .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                    .authorizeRequests()
                    .antMatchers("/api/**").authenticated()
    }
}

使用requiresChannel的Authorization Servers TokenEndpoint安全性是否有类似的构建器语法?

1 个答案:

答案 0 :(得分:0)

我最终创建了自己的配置 org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerSecurityConfiguration

由于我使用的是Spring引导,我只是自动安装了SecurityProperties并在Oauth端点上为SSL添加了这一行

if (this.security.isRequireSsl()) {
    http.requiresChannel().anyRequest().requiresSecure();
}

对于POST要求

  

HTTP                   .authorizeRequests()                   .antMatchers(HttpMethod.POST,tokenEndpointPath).fullyAuthenticated()                   .antMatchers(HttpMethod.GET,tokenEndpointPath).denyAll()

之后删除了@EnableAuthorizationServer,因此它将使用我的配置。