Похоже, вы не используете API должным образом.
Оба метода signWith()
и setSigningKey()
ожидают строку в кодировке Base64 в качестве ввода.Но вы вызываете TextCodec.BASE64.decode("...")
.
И jwtSecretKey
, и jwtSecretKey1
не похожи на строки в кодировке Base64.Однако, если вы попытаетесь их декодировать, они будут выдавать тот же вывод :
System.out.println(Arrays.toString(TextCodec.BASE64.decode("jwtSecretKey")));
System.out.println(Arrays.toString(TextCodec.BASE64.decode("jwtSecretKey1")));
[-113, 11, 82, 121, -54, -34, -76, -89, -78]
[-113, 11, 82, 121, -54, -34, -76, -89, -78]
И именно поэтому проверка подписи не завершится неудачей.
Вы должны использовать TextCodec.BASE64.encode("...")
вместо этого, как показано ниже:
String jws = Jwts.builder()
.claim("rainId", rainId.toString())
.signWith(SignatureAlgorithm.HS256, TextCodec.BASE64.encode("jwtSecretKey"))
.compact();
Jws<Claims> jwsClaims = Jwts.parser()
.require("rainId",rainId.toString())
.setSigningKey(TextCodec.BASE64.encode("jwtSecretKey1"))
.parseClaimsJws(jws);