Javascript 为什么jwt.sign()方法只对字符串密钥有效?

Javascript 为什么jwt.sign()方法只对字符串密钥有效?,javascript,node.js,jwt,secret-key,jwt-auth,Javascript,Node.js,Jwt,Secret Key,Jwt Auth,我正在尝试学习JWT身份验证令牌,但我遇到了一个问题 在我的代码中,这行代码运行良好 const token = jwt.sign({ foo: 'bar' }, 'ea7aae59cedb7346c'); 但是这条线不行 const token = jwt.sign({ foo: 'bar' }, ea7aae59cedb7346c); 在我看来,当我试图将jet身份验证密钥内联而不将其设置为字符串值时,它似乎不起作用 const token = jwt.sign({ foo: 'bar'

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

在我的代码中,这行代码运行良好

const token = jwt.sign({ foo: 'bar' }, 'ea7aae59cedb7346c');
但是这条线不行

const token = jwt.sign({ foo: 'bar' }, ea7aae59cedb7346c);
在我看来,当我试图将jet身份验证密钥内联而不将其设置为字符串值时,它似乎不起作用

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

为什么会这样?
jwt.sign()
方法中的
字符串化键值
常规键值
有什么区别?

谢谢您提出这个问题。 SecretrPrivateKey是一个字符串、缓冲区或对象,包含HMAC算法的密钥或RSA和ECDSA的PEM编码私钥 如中所述

我已经把我的文件放在了.env中,它工作正常。 像这样

而.env文件密钥是这个

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

有效负载可以是对象文字、缓冲区或表示 有效的JSON

所以在你的例子中,你把“有效载荷”作为一个对象传递,“秘密”是“嘘”

根据文件

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

因此,您不能提供一个长值而不是字符串的有效arugument

可以将值作为字符串传递,也可以在SecretrPrivateKey中传递算法 像这样

hmacSha256(key, message) {}

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