使用oauth2范围代替角色来保护弹簧执行器管理端点
作者:互联网
我最近已升级到Spring Cloud Dalston,这意味着Spring Boot 1.5.1,并且我无法再通过检查oauth2范围来保护管理端点.它曾在Spring Cloud Camden中工作.
这是之前起作用的配置:
@Configuration
public class SecurityConfiguration extends ResourceServerConfigurerAdapter {
@Value("${management.context-path}")
private String managementContextPath;
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// some paths I don't want to secure at all
.antMatchers("/path1/**", "/path2/**").permitAll()
// access to health endpoint is open to anyone
.antMatchers(HttpMethod.GET, managementContextPath + "/health").permitAll()
// but app.admin scope is necessary for other management endpoints
.antMatchers(managementContextPath + "/**").access("#oauth2.hasScope('my-super-scope')") //
// And we make sure the user is authenticated for all the other cases
.anyRequest().authenticated();
}
}
这是配置的重要部分:
security:
oauth2:
client:
clientId: a-client
clientSecret: the-client-password
resource:
tokenInfoUri: http://my-spring-oauth2-provider/oauth/check_token
management:
context-path: /my-context
security:
enabled: true
endpoints:
health:
sensitive: false
当我尝试在/ my-context / refresh上进行POST时,即使我提供了有效的OAuth2令牌,也会收到HTTP 401“需要完整身份验证”
查看日志,我发现我的请求被认为是匿名的,检查FilterChainProxy日志后发现没有调用OAuth2AuthenticationProcessingFilter.经过一些挖掘I found that I could change the oauth2 resource filter order,所以我尝试了一下,现在我有了OAuth2身份验证,是的,完成了吗?
哼,不,现在我的访问权限被拒绝.用户必须具有以下角色之一:ACTUATOR错误.
我尝试了其他一些方法,包括禁用管理安全性(但是我的规则未应用且访问权限向所有人开放),(ugh)@Order(无更改),甚至还有,瞧瞧,reading and applying the documentation都说:
To override the application access rules add a @Bean of type
WebSecurityConfigurerAdapter and use
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) if you don’t want to
override the actuator access rules, or
@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER) if you do
want to override the actuator access rules.
但这并没有改变错误:用户必须具有以下角色之一:ACTUATOR
有人有解决方法/想法吗?
更新:我也在使用Zuul,所以我终于创建了一条到我所需端点的特定zuul路由(在我的情况下为云总线刷新),在其他未公开的后端服务上不受保护,并使用oauth2保护了该zuul路由.
不过,如果有人找到解决方法,我将在这里留下这个问题,可能会有用.
解决方法:
可能明显是队长,但请参见http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.html.您可以使用management.security.roles覆盖角色,并简单地添加Oauth2凭据具有的任何角色.
标签:spring-boot,spring-security,spring-cloud,spring-security-oauth2,spring 来源: https://codeday.me/bug/20191111/2021751.html