【问题标题】:JWT Token Invalid Signature [duplicate]JWT 令牌无效签名 [重复]
【发布时间】:2018-03-16 04:09:52
【问题描述】:

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

Jwts.builder().setSubject(username).signWith(SignatureAlgorithm.HS512, MacProvider.generateKey()).compact();

生成的令牌:

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJlaG91c2VAZGV2ZXJldXgub3JnIn0.5SX-aU-p_RlfC3CZa-YXnQu_YR7RsG2Xfim3LOmlqxjAZrIyZiz0fYZwViHr113ms8TNvngcJcV07U4hK-RBZQ

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

【问题讨论】:

  • 您是否提供了MacProvider.generateKey() 生成的密钥来解码 jwt.io 中的签名?

标签: jwt digital-signature hmac jjwt


【解决方案1】:

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

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

Key key =MacProvider.generateKey();
String keyB64 = javax.xml.DataTypeConverter.printBase64Binary(key.getEncoded());

【讨论】:

    猜你喜欢
    • 2017-05-30
    • 2017-10-15
    • 2021-07-03
    • 1970-01-01
    • 2020-02-12
    • 2021-04-13
    • 2022-12-05
    • 2021-06-21
    • 2021-09-25
    相关资源
    最近更新 更多