0

我正在尝试创建一个签名的 JWT ,但是当我尝试签署他的 JWT 时,我得到了以下异常,

Caused by: javax.crypto.BadPaddingException: RSA private key operation failed
        at sun.security.rsa.RSACore.crtCrypt(RSACore.java:201)
        at sun.security.rsa.RSACore.rsa(RSACore.java:122)
        at sun.security.rsa.RSASignature.engineSign(RSASignature.java:192)
        ... 74 more

我有两个使用 RS256 alg 签署 JWT 的 JWK。两者的位大小均为 2048,但我能够使用其中一个成功签署 JWT,但不能与另一个签署。(不能共享 JWK)

我比较了 JWK 和 JWK JSON 中所有必需的键是相同的,但只有它们的模数和指数不同。

我无法理解导致问题的原因。

您可以使用以下代码复制问题:

KeyPairGenerator gen= KeyPairGenerator.getInstance("RSA");
        gen.initialize(2048);

        JWK sigJWK = new RSAKey.Builder((RSAPublicKey)gen.generateKeyPair().getPublic())
                .privateKey((RSAPrivateKey)gen.generateKeyPair().getPrivate())
                .keyUse(KeyUse.SIGNATURE)
                .keyID("s1")
                .algorithm(JWSAlgorithm.RS256)
                .build();

        Map<String, Object> jwkParamMap = JsonUtil.parseJson(sigJWK.toString());
        PrivateKey sigKey= new RsaJsonWebKey(jwkParamMap).getRsaPrivateKey();
        String tokenEndpoint = request.getAttribute("scheme") + "://" + request.getAttribute("ip") +
                request.getAttribute("tokenurl");



        Random randomInt=new Random();
        JWTClaimsSet claims = new JWTClaimsSet.Builder()
        .issuer(clientID)
        .subject(clientID)
        .audience(tokenEndpoint)
        .jwtID("ItsmejwtID"+randomInt.nextInt())
        .expirationTime(new Date(new Date().getTime()+ 120* 1000))
        .build();

        JWSSigner signer = new RSASSASigner(sigKey);
        SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.RS256), claims);
        signedJWT.sign(signer);

        return signedJWT.serialize(); 
4

0 回答 0