javascript 使用RS256时,secretOrPrivateKey必须是非对称密钥

xvw2m8pv  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(616)

我使用jsonwebtoken生成一个不记名令牌。
按照documentation提供的示例,我的代码如下所示

var privateKey = fs.readFileSync('src\\private.key'); //returns Buffer
let token = jwt.sign(myJsonContent, privateKey, { algorithm: 'RS256' });

此代码在控制台中返回此错误
使用RS256时,secretOrPrivateKey必须是非对称密钥
我已尝试在.env文件中包含该密钥,但错误相同
我还尝试将privateKey声明为Buffer,但没有任何变化。
有什么办法吗?

ddhy6vgd

ddhy6vgd1#

当我把我的Ubuntu20.04.5升级到22.04.2版本时,我也遇到了同样的问题。它曾经在以前的版本中工作得很好。当我们在Ubuntu 22.04.2上使用它时,似乎出现了一些与系统相关的问题。当我把我的Node.JS版本从16升级到Node.JS 18时,它对我很有效。

r6vfmomb

r6vfmomb2#

这篇文章有答案,但被删除了,所以我再次回答我的问题。
我的代码如下所示:

var privateKey = fs.readFileSync('src\\private.key', 'utf8');
let token = jwt.sign(myJsonContent, privateKey, { algorithm: 'RS256'});

我遇到的问题与私钥不对称有关。
问题是密钥需要以正确的.PAM编写。
.PAM如下所示:

-----BEGIN RSA PRIVATE KEY-----
encoded key etc
-----END RSA PRIVATE KEY-----

除非已经有了密钥,否则需要生成密钥,为此我使用了openssl
您可以下载here
下载后,打开bin文件夹并执行名为"openssl.exe"的文件
此时粘贴此命令

genrsa -out privateKey.key 2048

这将在bin文件夹中生成一个名为privateKey.key的文件。
此时,您可以复制并粘贴此文件的内容,并将其用作密钥
或者将文件导入到项目中,然后像我一样使用readFileSync。
这对我很有效,解决了我遇到的问题。

如果您已经有了密钥但遇到了相同的问题,我建议您使用openssl进行检查。

您可以找到许多有用的命令here,它们可能会对您有所帮助。

相关问题