我们有一些端点,这些端点是安全的,在访问它们之前,我们正在验证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。
我尝试通过指定多个安全匹配器但它失败了:(。你还有其他建议吗?
您可以公开多个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令牌进行反应性验证的支持,您可以通过使用它来删除一些样板。