我正在使用 Spring Cloud Gateway 构建 API 网关,我想保护它。
在我们当前的架构中,API 网关将隐藏在门户之后,该门户使用客户端证书(为系统用户颁发)进行身份验证,并在 HTTP 标头中发送调用服务的真实用户的名称。
我正在寻找一种方法来配置 Spring Security 以验证证书(以便其他人无法调用 GW),但同时从提供的标头构造主体(在证书检查成功后)。
如果我使用x509
Spring Security 的标准(使用提供subjectPrincipalRegex
的),用户服务只接收匹配的部分作为用户 ID,因此我可以Principal
从证书中的用户名构造(仍然相同)。
即我正在寻找这样的东西
- 没有客户端证书或无效的客户端证书 => 匿名用户(仍然可以访问某些路由)
- 有效证书 =>
UserDetails
根据 HTTP 标头获取(仍然会导致在 DB 中找不到用户,即匿名访问)。
注意:由于 Spring Cloud Gateway 是反应式的,我正在寻找适用于 Spring WebFlux 安全性的解决方案,但我相信这些概念与“标准非 WebFlux”安全性中的概念相同