访问决策规则 - 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.*loginPathlogoutPathhome.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-92147483636ManagementProperties.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();
	}
}