我试图以这种方式解析令牌:
Claims claims1 = Jwts.parser()
.setSigningKey( publicKey)
.parseClaimsJws( token);
但我总是得到这个例外:
java.lang.IllegalArgumentException: Key bytes cannot be specified for RSA signatures. Please specify a PublicKey or PrivateKey instance.
尽管如此,当我在https://jwt.io/中使用我的公开和 私钥 尝试相同的令牌时,会对其进行验证。两个问题:
是否需要指定私钥?如果是这样,我怎么能在我的代码中这样做?
事实上,我现在不关心签名验证 - 将来肯定。目前,我很乐意回答如何在不验证令牌的情况下解析令牌。
答案 0 :(得分:0)
我假设你的publicKey
是Base64编码的字符串。
在这种情况下,您需要对其进行解码并创建sun.security.rsa.RSAPublicKeyImpl
的实例:
byte[] decode = TextCodec.BASE64.decode(publicKey);
Key key = new RSAPublicKeyImpl(decode);
Claims claims1 = Jwts.parser()
.setSigningKey(key)
.parseClaimsJws(token);