【问题标题】:JWT token generated using jsonwebtoken library gives invalid signature in jwt.io使用 jsonwebtoken 库生成的 JWT 令牌在 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 中时,我得到了正确的标头和有效负载。 如果我插入我的秘密并按下复选框,我会得到正确的令牌。 我在做什么我做错了。谢谢

【问题讨论】:

    标签: node.js jwt auth0


    【解决方案1】:

    当您选中 jwt.io 上的复选框时,它会通过 base64 对您的密码进行解码。由于您没有在代码中对您的密码进行 base64 编码,因此您不应该在 jwt.io 上选中该框。两个令牌都是正确的,但用于不同的秘密。如果您想要从 jwt.io 获得的相同令牌并选中该框,您可以使用:

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

    然后使用它来签署您的令牌,而不是 privateKEY。但是,这并没有什么意义,因为您的密钥一开始就不是 base64 编码的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-14
      • 2017-03-10
      • 2022-12-05
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      相关资源
      最近更新 更多