java - 只能为 HMAC 签名指定 key 字节。请指定一个 PublicKey 或 PrivateKey 实例

标签 java openid-connect jjwt

我正在尝试读取从 Google OpenID Connect 的 Id token 生成的 Json Web token (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

请遵循什么是正确的方法?

最佳答案

我想我已经能够通过将 publicKey 解析为 RSAPublicKey 来解决问题。 .下面是我如何去做的细节。

 public static Optional<RSAPublicKey> getParsedPublicKey(){
       // public key content...excluding '---PUBLIC KEY---' and '---END PUBLIC KEY---'
        String PUB_KEY =System.getenv("PUBLIC_KEY") ; 

       // removes white spaces or char 20
        String PUBLIC_KEY = "";
          if (!PUB_KEY.isEmpty()) {
            PUBLIC_KEY = PUB_KEY.replace(" ", "");
        }

        try {
            byte[] decode = com.google.api.client.util.Base64.decodeBase64(PUBLIC_KEY);
            X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(decode);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(keySpecX509);
            return Optional.of(pubKey);

        } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
            e.printStackTrace();
            System.out.println("Exception block | Public key parsing error ");
            return Optional.empty();
        }

希望能帮助到你 :)。

关于java - 只能为 HMAC 签名指定 key 字节。请指定一个 PublicKey 或 PrivateKey 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60038550/

相关文章:

java - 每次调用 isEmailVerified() 都会返回错误条件,即使在验证电子邮件之后

java - 使用 JJWT 从 Xero 解析 RS256 JWT

java.lang.IllegalArgumentException : A signing key must be specified if the specified JWT is digitally signed 异常

ADFS 4.0 (2016) OpenID Connect 用户信息端点在提供访问 token 时返回 401

asp.net-mvc - AuthorizationCodeReceived 事件未触发

c# - 带有 openid 连接重定向的反向代理

java - 如何从 io.jsonwebtoken.Claims 转换为 java.util.Map<String,Object>?

java - 使用 Servlet 重定向 REST 请求

java - 使用 TreeSet 进行排序而不向其提供比较器

java - Selenium - 如何在高频刷新网页上正确获取元素