首页 > 解决方案 > 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"
},

标签: node.jsjwt

解决方案


RS256代表使用 SHA-256 的 RSASSA-PKCS1-v1_5,这意味着它使用使用 RSA 私钥生成的数字签名。您process.env.JWT_SECRET的字符串或缓冲区不是 PEM 格式的私有 RSA 密钥,因此节点的加密模块无法解析它。这就是你看到的错误。

当您删除该algorithm选项时,库会根据您的“秘密”输入自动选择一种算法,在这种情况下,HS256将使用对称秘密(并且是记录的默认值)。


推荐阅读