访问决策规则 - wzz-code/cloud-security-sample GitHub Wiki
访问决策规则
默认情况下,整个应用程序将使用具有相同访问规则(“authenticated”)的OAuth2进行保护。这包括Actuator端点,您可能更喜欢采用不同的安全措施,因此Spring Cloud Security提供了一个configurer回调,允许您更改OAtuth2身份验证的匹配和访问规则。任何类型 `OAuth2SsoConfigurer(有一个方便的空基础类)的bean将获得2个回调,一个用于设置OAuth2过滤器的请求匹配器,另一个使用完整的HttpSecurity构建器(因此您可以设置所有类型的行为,但主要应用程序是控制访问规则)。
默认登录路径(即触发重定向到OAuth2授权服务器的路径)为“/login”。它将始终添加到OAuth2 SSO的匹配模式,即使您也有 OAuth2SsoConfigurer
beans。默认的注销路径是 "/logout" ,它得到类似的处理,就像“home”页面(这是注销成功页面,默认为“/”)。这些路径可以通过设置 spring.oauth2.sso.*
(loginPath
, logoutPath
和 home.path
)来覆盖。
例如,如果您希望使用 OAuth2 保护 "/ui/**" 下的资源:
@Configuration
@EnableOAuth2Sso
@EnableAutoConfiguration
protected static class TestConfiguration extends OAuth2SsoConfigurerAdapter {
@Override
public void match(RequestMatchers matchers) {
matchers.antMatchers("/ui/**");
}
}
在这种情况下,应用程序的其余部分将默认为正常的Spring Boot访问控制(基本身份验证,或者您放置的任何自定义过滤器)。
与执行器端点集成
Spring Boot Actuator端点("/env","/metrics"等),如果存在,默认情况下将受到标准Spring Boot基本认证的保护。SSO认证过滤器被添加在过滤器之后直接位置的位置,该位置默认截取对Actuator端点的请求(即,被订购了 LOWEST_PRECEDENCE-9
或 2147483636
的 ManagementProperties.BASIC_AUTH_ORDER + 1
)。如果你想改变顺序,你可以设置 spring.oauth2.sso.filterOrder
。 如果这样做,并且该值小于默认值,则需要考虑设置执行器的访问规则,因为他们将可以访问所有经过身份验证的用户与外部提供者登录。一种方法是设置 management.contextPath=/admin
(例如),并使用 OAuth2SsoConfigurer
设置访问规则,例如。
@Configuration
@EnableOAuth2Sso
@EnableAutoConfiguration
protected static class TestConfiguration extends OAuth2SsoConfigurerAdapter {
@Override
public void configure(HttpSecurity http) {
http.authorizeRequests()
.antMatchers("/admin/**").role("ADMIN")
.anyRequest().authenticated();
}
}