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 覆盖默认实例@Imported。我们只需要确保添加优先级高于默认配置的@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 ...

HttpSecurityaddFilterXYX 方法相比,您在此处对过滤器在过滤器链中的位置没有细粒度的影响。 addTokenEndpointAuthenticationFilter 添加的任何过滤器都将插入到BasicAuthenticationFilter 之前。

如果您需要以更详细的方式控制过滤器的位置,您可以创建一个扩展 AuthorizationServerConfigurerAdapter 的 bean,而不是使用注解 @EnableAuthorizationServer。我没有尝试过,但我想您可以像 systemfreund 建议的那样扩展AuthorizationServerSecurityConfiguration,而不必指定@Order(-1),因为只有您的自定义配置会被导入。可能您还必须 @Import AuthorizationServerEndpointsConfiguration 就像在便利注释 @EnableAuthorizationServer 中所做的那样。

【讨论】:

以上是关于Spring OAuth 过滤器链和 Java 配置的主要内容,如果未能解决你的问题,请参考以下文章

Spring/OAuth2 错误 - InsufficientAuthenticationException,没有客户端身份验证。尝试添加适当的身份验证过滤器

Spring Security oauth2 cors 过滤器不起作用

spring-oauth2 登录成功处理程序

在 Spring Boot 2 上实现基于过滤器的 JWT 身份验证与 OAuth2 JWT 身份验证

没有客户端身份验证。尝试添加适当的身份验证过滤器异常 spring oauth2

Spring oauth2令牌请求中未实际使用的基本身份验证过滤器和身份验证入口点