传入的 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 以及刷新或初始化阶段。

相关文章