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

标签 java jwt

我正在尝试使用以下代码解码和验证我的服务中的 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/

相关文章:

java - 在 Android 上安装数据库期间,将 AsyncTask 与 Sqlite 一起使用会导致应用程序崩溃吗?

java - 返回大多数人居住的城市 - Stream()

javascript - NextAuth 在 session 回调中抛出 CLIENT_FETCH_ERROR 错误

C# Jwt token 生成失败 asp.net 核心 2.2

node.js - JWT:什么是好的 key ,以及如何将它存储在 Node.js/Express 应用程序中?

java - 在 Servlet 3.0 API 中继续或暂停和恢复以与客户端通信?

java - 将优先级队列读/写到文本文件的有效方法是什么?

java - 使用 Eclipse 创建新的 android 项目后,Eclipse 中的 SRC 文件夹为空(未创建 MainActivity 类)

jwt - 如何在 .NET Core Web API 中获取当前用户(来自 JWT token )

node.js - 如何生成刷新 token ?