JWT令牌无效签名

Moh*_*224 6 digital-signature hmac jwt jjwt

我在应用程序中使用JWT进行登录身份验证过程。要生成令牌,我正在使用:

Jwts.builder().setSubject(username).signWith(SignatureAlgorithm.HS512, MacProvider.generateKey()).compact();
Run Code Online (Sandbox Code Playgroud)

生成的令牌:

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOlaJlaG91c2VAZGV2ZXJldXgub3JnIn0.5SX-aU-p_RlfC3CZa-YXnQu_YR7RsG2Xfim3LOmlqxjzrIyZizQFKZ8H

当我在jwt.io调试器中解码此令牌时,它告诉我无效的签名。我无法找到此失败的原因,因为我可以在要验证的有效负载中看到用户名。有人可以指出我的问题吗?我需要更改代码中的任何内容吗?

ped*_*ofb 5

MacProvider.generateKey()每次使用时都会生成一个新的随机签名密钥。您需要生成一次并存储它。该密钥用于签名和验证令牌。

如果不存储密钥,则将无法验证令牌,这正是jwt.io的问题。您必须提供签名密钥。在您的情况下,使用可以包含无法代表字符的随机密钥(也可以使用密码短语,但不建议使用),将其编码为base64。然后在jwt.io中标记检查以验证令牌

Key key =MacProvider.generateKey();
String keyB64 = javax.xml.DataTypeConverter.printBase64Binary(key.getEncoded());
Run Code Online (Sandbox Code Playgroud)