我一直致力于使用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自动保护 验证客户端的凭据。客户必须注册 通过一个或多个提供ClientDetailsService 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安全性是否有类似的构建器语法?
答案 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,因此它将使用我的配置。