spring-boot - Reactive-Spring-Security-5.1.3.RELEASE,多重授权
问题描述
我们有一些端点,它们是安全的,在访问它们之前,我们正在验证 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 令牌的支持,您可以使用它来删除一些样板文件。
推荐阅读
- linux - Linux 模块加载
- arraylist - 如何在 hdf5 中压缩列表/嵌套列表
- apache-kafka - Kafka Connect:获取连接器配置
- android - 更快的 SurfaceTexture.onFrameAvailable 回调
- agora.io - 无法使用 vp8 编解码器在 agora 中开始直播
- javascript - 在 Node JS 中将 Json 数组转换为单个对象
- javascript - Node.js - Window.Location.Href 不工作
- robotframework - 如何在机器人框架中从一个关键字访问全局变量到另一个关键字
- python - predict() 缺少 1 个必需的位置参数:“X”,同时通过 azure 中的 python 使用已部署的 Web 服务
- python - log(x) 的泰勒级数