概述
OAuth2AuthorizationServerWebSecurityConfiguration类是 Spring Boot 自动配置 OAuth2 授权服务器 Web 安全的核心类,负责配置授权服务器的安全过滤链。
类结构分析
类注解
@Configuration(proxyBeanMethods = false)
@ConditionalOnDefaultWebSecurity
@ConditionalOnBean({RegisteredClientRepository.class, AuthorizationServerSettings.class})
-
@Configuration标记为配置类 -
@ConditionalOnDefaultWebSecurity表示在默认 Web 安全配置下生效 -
@ConditionalOnBean要求在RegisteredClientRepository和AuthorizationServerSettingsBean 存在时才生效
核心方法解析
1. authorizationServerSecurityFilterChain 方法
@Bean
@Order(Integer.MIN_VALUE)
SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
// 应用默认授权服务器安全配置
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
// 启用 OpenID Connect 1.0 支持
http.getConfigurer(OAuth2AuthorizationServerConfigurer.class)
.oidc(Customizer.withDefaults());
// 配置资源服务器 JWT 支持
http.oauth2ResourceServer(resourceServer -> {
resourceServer.jwt(Customizer.withDefaults());
});
// 异常处理配置
http.exceptionHandling(exceptions -> {
exceptions.defaultAuthenticationEntryPointFor(
new LoginUrlAuthenticationEntryPoint("/login"),
createRequestMatcher()
);
});
return http.build();
}
关键点:
-
@Order(Integer.MIN_VALUE)确保这个过滤器链最先执行 -
应用了默认的 OAuth2 授权服务器安全配置
-
启用了 OIDC (OpenID Connect) 支持
-
配置了 JWT 资源服务器支持
-
设置了异常处理,将未认证请求重定向到登录页
2. defaultSecurityFilterChain 方法
@Bean
@Order(2147483642) // 接近Integer.MAX_VALUE的顺序
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(authorize -> {
authorize.anyRequest().authenticated();
}).formLogin(Customizer.withDefaults());
return http.build();
}
关键点:
-
作为默认安全过滤链,顺序接近最大
-
要求所有请求必须认证
-
启用表单登录
3. createRequestMatcher 方法
private static RequestMatcher createRequestMatcher() {
MediaTypeRequestMatcher requestMatcher =
new MediaTypeRequestMatcher(MediaType.TEXT_HTML);
requestMatcher.setIgnoredMediaTypes(Set.of(MediaType.ALL));
return requestMatcher;
}
作用:创建匹配 HTML 请求的匹配器,用于区分 API 请求和浏览器请求
安全配置流程
-
授权服务器端点保护:
-
/oauth2/authorize- 授权端点 -
/oauth2/token- 令牌端点 -
/oauth2/jwks- JWK 端点 -
/oauth2/userinfo- OIDC 用户信息端点
-
-
资源服务器配置:
-
支持 JWT 令牌验证
-
-
认证流程:
-
未认证的 HTML 请求重定向到登录页
-
API 请求返回 401 未授权
-
自定义扩展点
1. 自定义安全规则
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
// 自定义授权端点访问规则
http.getConfigurer(OAuth2AuthorizationServerConfigurer.class)
.authorizationEndpoint(authorizationEndpoint ->
authorizationEndpoint.consentPage("/oauth2/consent"));
return http.build();
}
2. 添加自定义安全过滤器
@Bean
@Order(Integer.MIN_VALUE + 1) // 在授权服务器过滤器之后
SecurityFilterChain customSecurityFilterChain(HttpSecurity http) throws Exception {
http.securityMatcher("/custom/**")
.authorizeHttpRequests(authorize ->
authorize.anyRequest().hasRole("ADMIN"));
return http.build();
}
生产环境建议
-
安全加固:
-
配置 CSRF 保护
-
设置适当的 CORS 策略
-
启用 HSTS
-
-
性能优化:
-
缓存 JWK Set
-
优化令牌验证流程
-
-
监控:
-
记录授权服务器活动
-
监控异常请求
-
这个配置类提供了开箱即用的 OAuth2 授权服务器安全配置,同时保留了足够的灵活性供开发者定制。

2875

被折叠的 条评论
为什么被折叠?



