node.js - 模拟 jwt 签名的私钥

标签 node.js typescript jestjs jwt ts-jest

我正在使用 jsonwebtoken在我的 nodejs+typescript 项目中。现在,我想测试接受私钥(作为字符串)的函数。

import { sign } from 'jsonwebtoken';
//function to test
function generateToken(privateKey: string) {
  const payload = {...};
  return sign(payload, privateKey);
}

我的 Jest 测试:

describe('token generator', () => {
  it('', () => {
     // I mock the private key in my test
     const pKey = 'dummy_pkey';

     const token = generateToken(pKey);
      ...
   })

当我运行 jest 测试时,我收到以下指向生产代码的错误 return sign(payload, privateKey) :

error:0909006C:PEM routines:get_name:no start line

显然 jsonwebtoken 库的私钥无效。那么,模拟私钥对于Jest地签署 jwt token 的最佳方法是什么?

------------更新--------

我尝试使用 nodeJs 提供的加密:

import { generateKeyPairSync } from 'crypto';

describe('token generator', () => {
  it('', () => {
      const { privateKey } = generateKeyPairSync('rsa', {
          modulusLength: 2048,
       });
     const token = generateToken(privateKey);
      ...
   })

但我遇到了同样的错误: error:0909006C:PEM routines:get_name:no start line,为什么? (我知道这是因为 PEM 缺少起始行,但为什么,我哪里错了?在测试中使用 jsonwebtoken 和 crytpo 作为私钥)

最佳答案

在生成 key 对时,您没有为您的公钥和私钥提供编码选项。我不知道默认值是什么,但是这个

const { privateKey, publicKey } = generateKeyPairSync('rsa', {
    modulusLength: 2048,
    publicKeyEncoding: {
      type: 'spki',
      format: 'pem'
    },
    privateKeyEncoding: {
      type: 'pkcs8',
      format: 'pem',
    }
  })

当我将它与 jwt.sign(payload, privateKey, signOptions) 一起使用时对我有用

还有 docs状态

When encoding public keys, it is recommended to use 'spki'. When encoding private keys, it is recommended to use 'pkcs8' with a strong passphrase, and to keep the passphrase confidential.

关于node.js - 模拟 jwt 签名的私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71142053/

相关文章:

javascript - Node-firebird顺序选择

angularjs - 我如何在 Http Observable 上使用 "Interval"或类似的?

javascript - 从谷歌表格中的电报机器人输入数据

javascript - Jest test.each 的类型不正确

reactjs - 使用 useEffect() 钩子(Hook)在 Jest 中测试函数

node.js - SpyOn Controller 中的快速路由处理函数

jquery - 使用 MySql/Node js 创建通知服务器

node.js - 根据 key 是否存在进行多重分组

node.js - 如何使用 ffmpeg 将 Node 应用程序部署到 heroku?

javascript - 当我在我的 Angular 应用程序中进行验证时,我面临在类型'AbstractControl []错误上找不到类型为 'string' 的参数的索引签名