Spring OAuth 过滤器链和 Java 配置
Posted
技术标签:
【中文标题】Spring OAuth 过滤器链和 Java 配置【英文标题】:Spring OAuth Filter Chain & Java Config 【发布时间】:2015-11-04 03:46:26 【问题描述】:我正在尝试将 spring-security-oauth 添加到具有 spring-security 的现有应用程序中。我正在使用 Java 配置。
我有一个现有的修改过滤器链(添加了一些自定义过滤器),但对“/oauth/token”的请求没有使用它,而是使用“默认”过滤器链。如何访问保护 oauth 端点的过滤器链,以便我也可以在那里使用自定义过滤器,或者我可以将 OAuth 端点连接到现有设置中?
【问题讨论】:
提供spring security oauth2配置。 【参考方案1】:这可能不是最好的方法,但我没有找到更好的方法。这个想法是提供一个自定义的AuthorizationServerSecurityConfiguration
实例并通过@EnableAuthorizationServer
覆盖默认实例@Import
ed。我们只需要确保添加优先级高于默认配置的@Order
注解即可:
@EnableAuthorizationServer
@Import(CustomSecurityConfig.class)
public class Application
@Configuration
@Order(-1)
public class CustomSecurityConfig extends AuthorizationServerSecurityConfiguration
@Override
protected void configure(HttpSecurity http) throws Exception
super.configure(http); // do the default configuration first
http
.addFilterBefore(new MyFilter(), ...);
【讨论】:
【参考方案2】:使用AuthorizationServerConfigurer
接口确实有一种更流畅的方式。
您可以坚持注解@EnableAuthorizationServer
并在您的配置文件中实现上述接口。这将使您能够通过执行以下操作来更改 oauth2-filter-chain:
@Configuration
@EnableWebSecurity
@EnableAuthorizationServer
public class SecurityConfig extends WebSecurityConfigurerAdapter
implements AuthorizationServerConfigurer
// some configuration ...
public void configure(AuthorizationServerSecurityConfigurer oauthSecurity) throws Exception
oauthSecurity.addTokenEndpointAuthenticationFilter(new YourFilter());
// more configuration ...
与HttpSecurity
的addFilterXYX
方法相比,您在此处对过滤器在过滤器链中的位置没有细粒度的影响。 addTokenEndpointAuthenticationFilter
添加的任何过滤器都将插入到BasicAuthenticationFilter
之前。
如果您需要以更详细的方式控制过滤器的位置,您可以创建一个扩展 AuthorizationServerConfigurerAdapter
的 bean,而不是使用注解 @EnableAuthorizationServer
。我没有尝试过,但我想您可以像 systemfreund 建议的那样扩展AuthorizationServerSecurityConfiguration
,而不必指定@Order(-1)
,因为只有您的自定义配置会被导入。可能您还必须 @Import
AuthorizationServerEndpointsConfiguration
就像在便利注释 @EnableAuthorizationServer
中所做的那样。
【讨论】:
以上是关于Spring OAuth 过滤器链和 Java 配置的主要内容,如果未能解决你的问题,请参考以下文章
Spring/OAuth2 错误 - InsufficientAuthenticationException,没有客户端身份验证。尝试添加适当的身份验证过滤器
Spring Security oauth2 cors 过滤器不起作用
在 Spring Boot 2 上实现基于过滤器的 JWT 身份验证与 OAuth2 JWT 身份验证