使用 jsonwebtoken 库生成的 JWT 令牌在 jwt.io 中提供了无效签名
Posted
技术标签:
【中文标题】使用 jsonwebtoken 库生成的 JWT 令牌在 jwt.io 中提供了无效签名【英文标题】:JWT token generated using jsonwebtoken library gives invalid signature in jwt.io 【发布时间】:2019-04-10 15:40:56 【问题描述】:简而言之:使用以下代码生成的令牌提供了正确的标头和有效负载(当我将生成的令牌粘贴到 JWT.io 中时)。
它仅在我插入密码并按下 jwt.io 中的密码编码复选框时才有效。之后我得到了有效的令牌。
但是 var token = jwt.sign(payload, privateKEY, signOptions);这一步应该和我猜的一样。
我的代码。
var jwt = require('jsonwebtoken');
var payload =
"userId" : 'YYYYYYYYYYYYYYYYYYYYYYY',
"iat" : new Date().getTime(),
;
var signOptions =
algorithm: "HS512"
;
var privateKEY = 'XXXXXXXXXXXXXXXXXXXXXXXX';
var token = jwt.sign(payload, privateKEY, signOptions);
console.log("Token :" + token);
这给了我一个无效的令牌,但是当我将该令牌粘贴到 jwt.io 中时,我得到了正确的标头和有效负载。 如果我插入我的秘密并按下复选框,我会得到正确的令牌。 我在做什么我做错了。谢谢
【问题讨论】:
【参考方案1】:当您选中 jwt.io 上的复选框时,它会通过 base64 对您的密码进行解码。由于您没有在代码中对您的密码进行 base64 编码,因此您不应该在 jwt.io 上选中该框。两个令牌都是正确的,但用于不同的秘密。如果您想要从 jwt.io 获得的相同令牌并选中该框,您可以使用:
var decodedSecret = Buffer.from(privateKEY, 'base64');
然后使用它来签署您的令牌,而不是 privateKEY
。但是,这并没有什么意义,因为您的密钥一开始就不是 base64 编码的。
【讨论】:
以上是关于使用 jsonwebtoken 库生成的 JWT 令牌在 jwt.io 中提供了无效签名的主要内容,如果未能解决你的问题,请参考以下文章
使用由 jose4j 生成的令牌在 node.js 中使用 jsonwebtoken 验证 JWT 失败