为 Spring 响应式 JWT 解码器配置 JWKS 代理下载
将客户端注入 NimbusReactiveJwtDecoder,并在接入资源服务器时保留现有的 issuer、audience 及其他令牌校验。
var transport = reactor.netty.http.client.HttpClient.create()
.proxy(spec -> spec
.type(reactor.netty.transport.ProxyProvider.Proxy.HTTP)
.host("proxy.example")
.port(8080));
var webClient = org.springframework.web.reactive.function.client.WebClient
.builder()
.clientConnector(new org.springframework.http.client.reactive
.ReactorClientHttpConnector(transport))
.build();
var decoder = org.springframework.security.oauth2.jwt.NimbusReactiveJwtDecoder
.withJwkSetUri(jwkSetUri)
.webClient(webClient)
.build();
decoder.setJwtValidator(org.springframework.security.oauth2.jwt.JwtValidators
.createDefaultWithIssuer(issuer));使用可信的 jwkSetUri/issuer 值,并通过真正的 ReactiveJwtDecoder Bean 或显式的资源服务器配置安装该解码器。在未改动的活动解码器旁新建它不会改变密钥获取方式。若可信 JWKS URL 是公开的且允许公共中间人,HTTP 代理列表可提供无需账户的传输主机和端口候选。
所展示的校验器保留默认时间校验和 issuer 校验。替换解码器时,请保留 audience 要求以及应用的全部额外校验器。
已知的密钥 URI 会跳过定位它的发现流程。如果其他组件仍在执行发现或令牌获取,请单独配置该客户端的路由。
本文涵盖资源服务器上的响应式 JWT 校验。Servlet 资源服务器、OAuth2 登录和业务 API 客户端另有挂接点;请将失败的密钥 URL 和阶段保留在排查记录中。