使用jsonwebtoken库生成的JWT令牌在jwt.io中给出了无效签名

时间:2018-11-07 08:09:42

标签: node.js jwt auth0

简而言之:使用以下代码生成的令牌会提供正确的标头和有效负载(当我将生成的令牌粘贴到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。 如果我插入我的机密并按下复选框,我将获得正确的令牌。 我做错了。谢谢

1 个答案:

答案 0 :(得分:0)

当您选中jwt.io上的复选框时,它将以base64解码您的机密。由于您没有对代码进行base64编码,因此您不应在jwt.io上选中该复选框。这两个令牌都是正确的,但是具有不同的秘密。如果您希望使用从jwt.io获得的相同令牌并选中复选框,则可以使用以下方法:

var decodedSecret = Buffer.from(privateKEY, 'base64');

然后使用它而不是privateKEY来签名您的令牌。但是,这实际上没有任何意义,因为您的密钥并不是以base64编码开头的。