我使用jsonwebtoken
生成一个不记名令牌。
按照documentation提供的示例,我的代码如下所示
var privateKey = fs.readFileSync('src\\private.key'); //returns Buffer
let token = jwt.sign(myJsonContent, privateKey, { algorithm: 'RS256' });
此代码在控制台中返回此错误
使用RS256时,secretOrPrivateKey必须是非对称密钥
我已尝试在.env
文件中包含该密钥,但错误相同
我还尝试将privateKey
声明为Buffer
,但没有任何变化。
有什么办法吗?
2条答案
按热度按时间ddhy6vgd1#
当我把我的
Ubuntu
从20.04.5
升级到22.04.2
版本时,我也遇到了同样的问题。它曾经在以前的版本中工作得很好。当我们在Ubuntu 22.04.2
上使用它时,似乎出现了一些与系统相关的问题。当我把我的Node.JS版本从16升级到Node.JS 18
时,它对我很有效。r6vfmomb2#
这篇文章有答案,但被删除了,所以我再次回答我的问题。
我的代码如下所示:
我遇到的问题与私钥不对称有关。
问题是密钥需要以正确的
.PAM
编写。.PAM
如下所示:除非已经有了密钥,否则需要生成密钥,为此我使用了
openssl
您可以下载here
下载后,打开bin文件夹并执行名为
"openssl.exe"
的文件此时粘贴此命令
这将在bin文件夹中生成一个名为
privateKey.key
的文件。此时,您可以复制并粘贴此文件的内容,并将其用作密钥
或者将文件导入到项目中,然后像我一样使用readFileSync。
这对我很有效,解决了我遇到的问题。
如果您已经有了密钥但遇到了相同的问题,我建议您使用
openssl
进行检查。您可以找到许多有用的命令here,它们可能会对您有所帮助。