gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:34:57 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com