【发布时间】:2019-02-20 04:16:08
【问题描述】:
我了解了如何使用 Crypto 和 jsonwebtoken 库在 NodeJS 中创建 HMAC 256 加密 JWT。很简单
//encrypt & sign with HS256
const jwt = require('jsonwebtoken');
const pass = crypto.randomBytes(256).toString('hex');
const A = {algorithm:'HS256'};
const token = jwt.sign({ foo: 'bar' }, pass, A);
//decrypt & verify
jwt.verify(token, pass, A, function(err, decoded)
{
console.log('decode ',decoded);
console.log('err ',err);
res.send({error:err, text:decoded});
});
我想将“pass”替换为“RSA 256 SHA”,将 A 替换为 {algorithm:'RS256'}
在 node crypto JS 的文档中,我看到了命令
const sign = crypto.createSign('RSA-SHA256');
但是文档有这个功能
getPrivateKeySomehow()
未定义或 crypto.getPrivateKeySomehow() 的一部分
所以我想我只需要帮助获取从加密返回的 RSA-SHA-256 字符串,以便我可以将其传递到 jsonwebtoken 以签署我的 JWT。
注意:我不想从服务器上的静态文件中读取 private.key,因为我发现我的所有用户也拥有一个私钥很大的安全风险,因此为什么我要生成自己的 256 字节密码并将它们存储在异地(不包括在这篇文章中)
另外,我不确定我是否应该做这样的事情(不使用命令行中的 openssl 之类的东西?)
const begin = '-----BEGIN RSA PRIVATE KEY-----\n';
const enc = crypto.randomBytes(256).toString('base64') + '\n';
const end = '-----END RSA PRIVATE KEY-----'
const pass = sign.sign(begin + enc + end);
const A = {algorithm:'RS256'};
const token = jwt.sign({ foo: 'bar' }, pass, A);
【问题讨论】:
标签: node.js encryption jwt cryptojs