如何获取 jsonwebtoken 秘密的密钥?

Chi*_*ams 4 node.js express jwt express-jwt

我正在使用jsonwebtokenNode.js 的模块。我怎样才能获得该功能的密钥jwt.signjwt.sign(payload, secretOrPrivateKey, [options, callback])

根据文档:

secretOrPrivateKey是一个字符串、缓冲区或对象,其中包含 HMAC 算法的秘密或 RSA 和 ECDSA 的 PEM 编码私钥。如果私钥带有密码短语,则可以使用对象 { key, passphrase } (基于加密文档),在这种情况下,请确保传递算法选项。

示例中使用的密钥是“shhhh”,但这可能不安全: var jwt = require('jsonwebtoken'); var token = jwt.sign({ foo: 'bar' }, 'shhhhh');

我怎样才能获得/生成更好的密钥?

11A*_*ND2 9

要创建“安全”随机密码,我喜欢使用:openssl rand -base64 60在 Linux 上。


小智 5

首先,您应该在 Linux 上的命令行中按照两个步骤使用 openssl 生成私钥和公钥

步骤1

openssl genrsa -out private-key.pem 1024
Run Code Online (Sandbox Code Playgroud)

第2步。

openssl rsa -in private-key.pem -out public-key.pem -outform PEM -pubout
Run Code Online (Sandbox Code Playgroud)

现在你可以用这种方式编写jwt代码了。

const fs = require('fs');
const jwt = require('jsonwebtoken');
const path = require('path');
const jwtPrivateKey = path.resolve('') + '/keys/private_key.pem';
const jwtPublicKey = path.resolve('') + '/keys/public_key.pem';

module.exports.generateToken = async(id, name, type) => {
  const payload = {
    id: id,
    name: name,
    type: type
  };
  const token = await  jwtSign(payload);
  return token;
};

module.exports.verifyToken = async(token) => {
  const result = await jwtVerify(token);
  return result;
};

module.exports.getPayloadFromToken = async(token) => {
  const payload = await jwtVerify(token);
  return payload;
};

const jwtSign = (payload) => {
  const options = {
    algorithm: 'RS256',
    expiresIn: '24h'
  }
  return new Promise((resolve, reject) => {
    try {
      const cert = fs.readFileSync(jwtPrivateKey);
      const token = jwt.sign(payload, cert, options);
      resolve(token);
    } catch (err) {
      reject(err);
    }
  })
}

const jwtVerify = (token) => {
  const options = {
    algorithms: ['RS256']
  }
  return new Promise((resolve, reject) => {
    try {
      const cert = fs.readFileSync(jwtPublicKey);
      const result = jwt.verify(token, cert, options);
      resolve(result);
    } catch (err) {
      reject(err);
    }
  })
}
Run Code Online (Sandbox Code Playgroud)