简而言之:使用以下代码生成的令牌会提供正确的标头和有效负载(当我将生成的令牌粘贴到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中时,我得到了正确的Headers和Payload。 如果我插入我的机密并按下复选框,我将获得正确的令牌。 我做错了。谢谢
答案 0 :(得分:0)
当您选中jwt.io上的复选框时,它将以base64解码您的机密。由于您没有对代码进行base64编码,因此您不应在jwt.io上选中该复选框。这两个令牌都是正确的,但是具有不同的秘密。如果您希望使用从jwt.io获得的相同令牌并选中复选框,则可以使用以下方法:
var decodedSecret = Buffer.from(privateKEY, 'base64');
然后使用它而不是privateKEY
来签名您的令牌。但是,这实际上没有任何意义,因为您的密钥并不是以base64编码开头的。