Reactive-Spring-Security-5.1.3.RELEASE,多个授权

时间:2019-02-20 09:41:30

标签: spring-boot spring-security spring-webflux

我们有一些端点是安全的,在访问它们之前,我们先验证jws是否正确。为了做到这一点,我们定义了一个SecurityContext,它实际上持久保存Auth pojo并在控制器的下游对其进行操作。 SecurityWebFilterChain配置如下所示:

@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
    return http.csrf().disable()
            .formLogin().disable()
            .logout().disable()
            .httpBasic().disable()
            .securityContextRepository(securityContext)
            .authorizeExchange()
            .anyExchange().authenticated()
            .and()
            .build();
}

调用是在内部进行的,我们刚刚验证了jws令牌。

现在,一些外部客户需要与我们集成,并且我们需要验证jwe令牌。事实是,我们需要以某种方式告诉spring-security为存在的端点jws和为新端点jwe验证。

我尝试通过指定多个安全匹配器进行尝试,但失败了:(。您还有其他建议吗?

1 个答案:

答案 0 :(得分:2)

您可以公开多个bean。我建议指定一个订单:

@Bean
@Order(1)
public SecurityWebFilterChain first(ServerHttpSecurity http) {
    http
        .securityMatcher(...)
        ...

    return http.build();
}

@Bean
@Order(2)
public SecurityWebFilterChain second(ServerHttpSecurity http) {
   http
       .securityMatcher(...)
       ...

   return http.build();
}

作为附带说明,Spring Security附带了对以反应方式验证JWS令牌的支持,您也许可以通过使用它来删除一些样板。