node.js - jwt.sign() 我得到错误:0909006C:PEM 例程:get_name:no start line 取决于选项
问题描述
const jwt = require("jsonwebtoken");
jwt.sign(user.dataValues, process.env.JWT_SECRET, {
algorithm: "RS256",
expiresIn: "14 days",
});
导致错误:错误:0909006C:PEM 例程:get_name:Sign.sign 处没有起始行(节点:internal/crypto/sig:131:29)
jwt.sign(user.dataValues, process.env.JWT_SECRET, {
//algorithm: "RS256",
expiresIn: "14 days",
});
工作得很好
设置:
操作系统:Mac OS
Node v17.0.1
"dependencies": {
"apollo-server": "^3.4.0",
"apollo-server-core": "^3.4.0",
"dotenv": "^10.0.0",
"fs": "^0.0.1-security",
"google-auth-library": "^7.10.1",
"graphql": "^15.6.1",
"jsonwebtoken": "^8.5.1",
"nodemon": "^2.0.14",
"pg": "^8.7.1",
"sequelize": "^6.7.0"
},
解决方案
RS256
代表使用 SHA-256 的 RSASSA-PKCS1-v1_5,这意味着它使用使用 RSA 私钥生成的数字签名。您process.env.JWT_SECRET
的字符串或缓冲区不是 PEM 格式的私有 RSA 密钥,因此节点的加密模块无法解析它。这就是你看到的错误。
当您删除该algorithm
选项时,库会根据您的“秘密”输入自动选择一种算法,在这种情况下,HS256
将使用对称秘密(并且是记录的默认值)。
推荐阅读
- javascript - angularjs中基于条件的显示数据
- user-interface - 新语言 Xamarin 后刷新 UI
- odoo - 有没有办法在 Qweb 中使用小数精度显示变量?
- python - 如何在数学函数中使用下一个乘法数
- video - 使用 FFmpeg 转换为 HEVC 会产生与 Keynote 不兼容的视频,但 Handbrake 可以
- websocket - 打开 WebSocket 连接时有没有办法使用自定义标头?
- laravel - .editorconfig 文件夹特定的配置
- visual-studio-code - 如何在 VSC 中获得垂直突出显示
- python - 深度学习:如何构建字符级嵌入?
- python - 如何为多个类别设置 seaborn 调色板?