我正在尝试对JWT令牌进行签名,收到以下错误
io.jsonwebtoken.security.InvalidKeyException: JWT standard signing algorithms require either 1) a SecretKey for HMAC-SHA algorithms or 2) a private RSAKey for RSA algorithms or 3) a private ECKey for Elliptic Curve algorithms. The specified key is of type sun.security.pkcs11.P11Key$P11PrivateKey
发生此错误的代码
public static String createJwtToken(Key privKey, String iss, String[] roles) {
long nowMs = System.currentTimeMillis();
long ttl = 60*60*1000; // 1 hour
Date now = new Date(nowMs);
Date exp = new Date(nowMs+ttl);
return "Bearer " + Jwts.builder()
.setHeaderParam("typ", "JWT")
.claim("roles", roles)
.setIssuer(iss).setAudience("DRF")
.setIssuedAt(now)
.setExpiration(exp)
.signWith(privKey)
.compact();
}
私钥是ECDSA密钥。从文件中读取字节,然后使用此代码创建PrivateKey对象
KeyFactory kf = KeyFactory.getInstance("EC");
EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
PrivateKey privateKey = kf.generatePrivate(keySpec);
在RHEL 7上使用Java 8没有问题。我已经升级到RHEL 8(没有其他更改),现在看到了问题。我也试过使用Java 11,没有任何变化。我用openjdk
1条答案
按热度按时间yv5phkfx1#
仍然不确定是什么导致了这个问题,但它似乎与RHEL 8存储库中的Java构建隔离开来。使用其他openjdk构建可以像预期的那样工作。