【发布时间】:2019-11-20 04:03:53
【问题描述】:
我试图创建 JWT(“JOT”)令牌以使我的 api 调用真实。当我尝试使用 RSA512 签名创建令牌时,我会收到一条错误消息
java.lang.IllegalArgumentException:必须使用 RSA PrivateKey 计算 RSA 签名。 javax.crypto.spec.SecretKeySpec 类型的指定密钥不是 RSA PrivateKey。
我正在使用以下代码:
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.RS512;
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(SECRET_KEY);
Key signingKey = new SecretKeySpec(apiKeySecretBytes,
signatureAlgorithm.getJcaName());
JwtBuilder builder = Jwts.builder().claim("uuid",
id).setIssuedAt(now).setExpiration(new Date(600000))
.signWith(signatureAlgorithm, signingKey);
注意:我的“SECRET_KEY”是一个字符串,是一个在线随机生成的私钥。 我的问题是如何从以 RSA 密钥大小编码为 4096 的字符串中获取 Key 对象。 4096,因为我使用的是RSA512加密,建议RSA512使用4096密钥
【问题讨论】:
-
要在jwt.io 上验证您的令牌,您必须在
verify signature - your-256-bit-secret下的右栏中提供您的密码 -
该错误说明了密钥类型,但您没有显示有关
SECRET_KEY的详细信息。你能把钥匙贴出来吗? -
我使用了一些随机密钥,例如“adsfd564464gfasdf45ds4dffas56f4asd6fda45fads”
-
对于 HS 密钥来说已经足够了,但肯定不是 RSA 密钥。 RSA 密钥如下所示:
-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQDHikastc8+I81zCg/qWW8dMr8mqvXQ3qbPAmu0RjxoZVI47tvs...5vg087ZngKfFGR5rozDiTsK5DceTV97K a3Y+Nzl+XWTxDBWk4YPh2ZlKv402hZEfWBYxUDn5ZkH/bw== -----END RSA PRIVATE KEY-----在此 site 上,您可以创建用于测试的密钥。 -
感谢@jsp 的信息,它有效,但看起来我没有提供正确的签名。 ,我能够生成,但仍然显示 Invalid Signature @ jwt.io
标签: java spring-boot jwt jwt-auth