Spring boot Jwt 使用 RS256 签名

问题描述 投票:0回答:1

我得到了一个网址 - jwks_uri= https://xxxxx/oauth/nam/keys
...生成这个 json:

{
     "keys": [{
             "kty": "RSA",
             "use": "sig",
             "alg": "RS256",
             "kid": "233921010515334582428573459295448396160651486998",
             "x5c": ["MIIFQjCCBCqgAwIBAgIUKPlhgf+gbz7h0arpJdYiOXxj5xYwDQYJKoZIhvcNAQELBQAwNTEaMBgGA1UECxMRT3JnYW5pemF0aW9uYWwgQ0ExFzAVBg..........wTBo45axM="],
             "x5t": "BBSLHq3rpiVLP2rota71boxAdqE",
             "x5tS256": "VAvMs-i58nz5UjOzyOEPpDubjgsNDK_m5z7w8dudPaw",
             "n": "okBvqleqjWLqLQ20cd9oajuOFZgOdPgD0rz6PddT1uW0iPkZ53Az68D_9s0fSMh996iGxN8sZFcCO-v0DXFBmUZb8D1VuBbx4v8Q_OUWhUk6V0QgUnzsdEYP39tZqU4gq KMuwzCbqqD1tj1C510tT8LK8lJjYuIjP-eNHv_WaL9QAH0iRwOWXA_a9ZwEoOhI0R-HqnvvJNyuUnh0umHDow3Uu7uuTKMFmziNzcB4ANBrKytVsfqBz2M9qNi6YqpT1ysGyX_M_PCja 2q8CDQxpcUm7XikFNdjutTR_B1gXDEk0Y8O7MgeKQcbYq1jMGEzIUabeka6jbBE2RR-mzV1YQ",
             "e": "AQAB"
         }
     ]
}

该公司声称我拥有验证 jwt 公钥所需的一切,但在我的代码中我不断收到错误

由以下原因引起:javax.net.ssl.SSLHandshakeException:PKIX 路径构建 失败:sun.security.provider.certpath。 SunCertPathBuilder异常: 无法找到请求目标的有效认证路径。

这是我的方法:

private RSAPublicKey loadPublicKey(DecodedJWT token) throws JwkException, MalformedURLException {
    
    final String url = "https://XXXXXXXX/oauth/nam/keys"; //getKeycloakCertificateUrl(token);
 //   final String url = "https://XXXXXXXXX/api/GetCA";



    JwkProvider provider = new UrlJwkProvider(new URL(url));

    return (RSAPublicKey) provider.get(token.getKeyId()).getPublicKey();
}
java spring spring-boot oauth jwt
1个回答
0
投票

当您的 Java 代码尝试从该 URL(验证 JWT 所需的公钥)获取内容时,它无法建立正确的连接,因为它不信任该页面使用的证书。它是页面本身使用的 SSL 证书,而不是该端点返回的公钥。您应该做的是获取该证书(您可以在浏览器中打开

https://XXXXXXXX/oauth/nam/keys
页面并下载证书),然后将其添加到您的 Java 信任库中。您将在 juanlumn 发布的此链接下找到有关如何执行此操作的详细说明:Resolving javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path build failed Error?

© www.soinside.com 2019 - 2024. All rights reserved.