使用 JJWT 和 RSA 解码 IdToken

jav*_*Try 4 openid oauth-2.0 jwt jjwt

我的客户向我发送了一个 JWT,我需要使用他们的公钥验证此 JWT。我正在使用 Java 和 JJWT 框架来验证此令牌。我知道使用 HS256 解码此令牌,但使用 RS256 我不知道。

他们的配置是:

在此输入图像描述

在这里编辑以改进我的问题。我正在使用的 jjwt 解析示例:

        Claims String secret = "-----BEGIN CERTIFICATE-----myx5ckey-----END CERTIFICATE-----"
    byte[] dataBytes = Base64.getEncoder().encode(secret.getBytes());
    byte[] byteKey = Base64.getDecoder().decode(dataBytes);
    X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey);
    KeyFactory kf = KeyFactory.getInstance("RSA");

    PublicKey publicKey = kf.generatePublic(X509publicKey);

    Claims body = null;
    body = Jwts.parser().setSigningKey(publicKey.getEncoded())
            .parseClaimsJws(idToken)
            .getBody();


java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format

    at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:205)
Run Code Online (Sandbox Code Playgroud)

如何使用我显示的 JWKS 信息验证收到的令牌?(上图)

jav*_*Try 5

我解决了我的问题。

String secret2 = "myX5c";
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        Certificate certificate = cf.generateCertificate(new ByteArrayInputStream(DatatypeConverter.parseBase64Binary(secret2)));
        PublicKey publicKey = certificate.getPublicKey();


        Claims body = null;
        body = Jwts.parser().setSigningKey(publicKey)
                .parseClaimsJws(idToken)
                .getBody();
Run Code Online (Sandbox Code Playgroud)

@KcDoD 感谢您的提示。