【发布时间】:2020-05-19 04:03:33
【问题描述】:
我正在尝试读取从 Google OpenID Connect 的 Id 令牌生成的 Json Web 令牌(JWT),以获取声明并使用 jjwt 库进行验证。我已经尝试了几种方法来使用下面的代码修复它。
String publicKeyFromJsonFile = "-----BEGIN PUBLIC KEY-----xxxxxxx-----END PUBLIC KEY-----"
Claims claims = Jwts.parser()
.setSigningKey(publicKeyFromJsonFile)
.parseClaimsJws(jwt).getBody();
System.out.println(claims);
但我收到此错误:
java.lang.IllegalArgumentException: Key bytes can only be specified for HMAC signatures. Please specify a PublicKey or PrivateKey instance
请问什么是正确的方法?
【问题讨论】:
-
看起来您必须使用
KeyFactory解析您的公钥,然后将生成的实例传递给您的库。 -
嘿 @michalk .... 我最终用这段代码 sn-p 修复了 publicKey ---------------- ---
X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(PUBLIC_KEY));________RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(keySpecX509); -
它与那个 sn-p 临时工作得很好。它现在给出不同的错误。也就是说,
JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.......我不知道这是否是你真正推荐的。如果没有,你能帮帮我吗?谢谢。
标签: java openid-connect jjwt