Spring NimbusJwtDecoder:通过代理下载 JWK 集合
为 servlet 解码器提供可感知代理的 RestTemplate,并在替换自动配置时保留 issuer、audience 以及额外的令牌校验器。
传入的 bearer 请求可以到达资源服务器,而 JWT 校验却在出站 JWK 下载时失败。请配置该解码器使用的 HTTP 客户端:
var factory = new org.springframework.http.client.SimpleClientHttpRequestFactory();
factory.setProxy(new java.net.Proxy(
java.net.Proxy.Type.HTTP,
new java.net.InetSocketAddress("proxy.example", 8080)));
var rest = new org.springframework.web.client.RestTemplate(factory);
var decoder = org.springframework.security.oauth2.jwt.NimbusJwtDecoder
.withJwkSetUri(jwkSetUri)
.restOperations(rest)
.build();
decoder.setJwtValidator(
org.springframework.security.oauth2.jwt.JwtValidators
.createDefaultWithIssuer(issuer));使用应用真实的 jwkSetUri 和 issuer,并将此解码器安装到实际的资源服务器配置中。示例使用未经身份验证的 HTTP 代理和 servlet 风格的 Nimbus 解码器。对于允许的公共代理路由上的公共 JWK URL,HTTP 代理列表提供候选主机和端口值。
示例中的 issuer 校验器不能替代必需的 audience 或其他应用检查。替换自动配置的解码器时请保留这些检查;更改密钥下载路由并不决定应用应接受哪些令牌。
响应式解码器使用另一个接口。其他 issuer 发现或令牌获取客户端同样保留各自的传输配置。
已缓存的密钥无需新的下载即可让校验成功。评估该路由时,请保留失败密钥的 URL 以及刷新或初始化阶段。