【问题标题】:why jwt.sign() method only works on string secret key?为什么 jwt.sign() 方法仅适用于字符串密钥?
【发布时间】:2020-05-08 05:45:27
【问题描述】:

我正在尝试学习 JWT 身份验证令牌,但我遇到了问题。

在我的代码中,这一行可以正常工作。

const token = jwt.sign({ foo: 'bar' }, 'ea7aae59cedb7346c');

但这行不行。

const token = jwt.sign({ foo: 'bar' }, ea7aae59cedb7346c);

在我看来,当我尝试将 jet 身份验证密钥 inline 设置为 字符串值 时,它不起作用。

为什么会这样? jwt.sign()方法中的stringified key valueregular key value有什么区别?

【问题讨论】:

  • 这个问题需要更多细节,比如您使用的是哪种语言(似乎是 javascript,在这种情况下需要您使用哪种环境,即 nodejs )。它还需要您使用哪个 JWT 包/依赖项?到目前为止,通常不支持原生或语言 sdk 的 JWT。

标签: javascript node.js jwt secret-key jwt-auth


【解决方案1】:
jwt.sign(payload, secretOrPrivateKey, [options, callback])

Source

const token = jwt.sign({ foo: 'bar' }, 'shhhhh');

payload 可以是对象字面量、缓冲区或字符串表示 有效的 JSON。

因此,在您的情况下,您将“有效负载”作为对象传递,而“秘密”是“shhhhh”

根据文档

secretOrPrivateKey 是一个字符串、缓冲区或对象,其中包含 HMAC 算法的秘密或 RSA 的 PEM 编码私钥 和 ECDSA。

所以你没有提供一个有效的参数,它是长值而不是字符串

您可以将值作为字符串传递或在 secretOrPrivateKey 中传递算法 像这样

hmacSha256(key, message) {}

【讨论】:

    【解决方案2】:

    感谢您提出这个问题。 “secretOrPrivateKey 是一个字符串、缓冲区或对象,其中包含 HMAC 算法的秘密或 RSA 和 ECDSA 的 PEM 编码私钥。” 如https://www.npmjs.com/package/jsonwebtoken中所述

    我已将我的文件放入 .env 文件中,它工作正常。 像这样。

    .env 文件的键是 this.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 2019-03-06
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多