gpt4 book ai didi

java - JWT 验证失败 : Key bytes cannot be specified for RSA signatures. 请指定 PublicKey 或 PrivateKey 实例

转载 作者:行者123 更新时间:2023-12-01 16:18:55 25 4
gpt4 key购买 nike

我正在尝试使用以下代码解码和验证我的服务中的 JWT token :

String  jwtSecret= "my_key";
Claims claims = Jwts.parser()
.setSigningKey(jwtSecret)
.parseClaimsJws(jwt).getBody();
return claims;

上面的代码不起作用并抛出以下异常:

java.lang.IllegalArgumentException: Key bytes cannot be specified for RSA signatures.  Please specify a PublicKey or PrivateKey instance.

我也尝试过创建公钥,但没有成功。谁能说明我缺少什么?

最佳答案

看起来您是 JJWT,试图解码 JWT。你从哪里得到公钥?

您应该首先构建一个 PublicKey,然后将其传入,而不是将公钥作为字符串传递。如果您有权访问 key 的指数和模数:

BigInteger modulus = new BigInteger(1, Base64.getUrlDecoder().decode(key.getN()));

BigInteger exponent = new BigInteger(1, Base64.getUrlDecoder().decode(key.getE()));

RSAPublicKeySpec publicSpec = new RSAPublicKeySpec(modulus, exponent);
KeyFactory factory = KeyFactory.getInstance("RSA");
return factory.generatePublic(publicSpec);

如果你不这样做,this post解释了如何从字符串构建它,但您必须确保字符串的格式正确。

如果您有兴趣,这里有更多 detailed post that I wrote关于如何使用 JJWT 验证和解析由授权服务器签名的 JWT。

关于java - JWT 验证失败 : Key bytes cannot be specified for RSA signatures. 请指定 PublicKey 或 PrivateKey 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62323624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com