【发布时间】:2021-12-20 02:38:57
【问题描述】:
创建了以下 JWT 密钥。 但是,我们想将 io.jsonwebtoken 升级到 0.11.2 并看到 signWithMethod 已被弃用。 将签名更改为密钥,但是,旧密钥与密钥解密不兼容...为什么,如何? 如果它破坏了已发布的密钥,则无法进入 prod。
private final String secretKeyEncoded = Base64.getEncoder().encodeToString(secretKey.getBytes());
Key key = new SecretKeySpec(secretKeyEncoded.getBytes(), SignatureAlgorithm.HS256.getJcaName());
final String originalJWT = Jwts.builder()
.setClaims(claims)
.setIssuedAt(now)
.setExpiration(validity)
.signWith(SignatureAlgorithm.HS256, secretKeyEncoded)
.compact();
Jwts.parser().setSigningKey(secretKeyEncoded).parseClaimsJws(originalJWT);//old way
Jwts.parserBuilder().setSigningKey(secretKeyEncoded).build().parseClaimsJws(originalJWT);
Jwts.parserBuilder().setSigningKey(new String(key.getEncoded())).build().parseClaimsJws(originalJWT);
Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(originalJWT);//!!!!!! THIS IS NOT WORKING
final String newJWT = Jwts.builder()
.setClaims(claims)
.setIssuedAt(now)
.setExpiration(validity)
.signWith(key, SignatureAlgorithm.HS256)
.compact();
Jwts.parser().setSigningKey(key).parseClaimsJws(newJWT);//old way depricated
Jwts.parserBuilder().setSigningKey(secretKeyEncoded.getBytes()).build().parseClaimsJws(newJWT);
Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(newJWT); // THIS ONE WORKS !!!!
【问题讨论】: