String prvKey = "-----BEGIN PRIVATE KEY-----\n"
+ "........\n"
+ "-----END PRIVATE KEY-----";
Jwts.builder()
.setClaims(jwtClaim)
.signWith(SignatureAlgorithm.RS256, prvKey)
.compact();
Run Code Online (Sandbox Code Playgroud)
Running this Java code prints
java.lang.IllegalArgumentException: Base64-encoded key bytes may only be specified for HMAC signatures. If using RSA or Elliptic Curve, use the signWith(SignatureAlgorithm, Key) method instead.
当我将RS256更改为HS256签名时,令牌生成良好,但我的目标服务器只接受RS256签名令牌,所以我必须使用RS256。
错误日志对我没有帮助,因为我已经在使用signWith(SignatureAlgorithm, Key)方法了。
我该如何解决这个问题?
任何评论、链接都值得赞赏。
java.lang.IllegalArgumentException:只能为 HMAC 签名指定 Base64 编码的密钥字节。如果使用 RSA 或椭圆曲线,请改用 signWith(SignatureAlgorithm, Key) 方法。
意味着我应该传递一个 Key 对象而不是 String 对象。
prvKeyStr = prvKeyStr.replace("-----BEGIN PRIVATE KEY-----", "");
prvKeyStr = prvKeyStr.replace("-----END PRIVATE KEY-----", "");
prvKeyStr = prvKeyStr.replaceAll("\\s+","");
byte [] prvKeyBytes = Base64.decode(prvKeyStr);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(prvKeyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey prvKey = kf.generatePrivate(keySpec);
return Jwts.builder()
.setClaims(jwtClaim)
.signWith(SignatureAlgorithm.RS256, prvKey)
.compact();
Run Code Online (Sandbox Code Playgroud)
为我工作。
| 归档时间: |
|
| 查看次数: |
5781 次 |
| 最近记录: |