You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中用自定义Header、Payload及公/私钥生成JWT?

使用Node.js的jsonwebtoken库生成自定义JWT令牌

安装依赖

首先确保安装jsonwebtoken库:

npm install jsonwebtoken

核心实现代码

下面是完整的函数示例,支持自定义Header、Payload,并用RSA公私钥签名验证:

const jwt = require('jsonwebtoken');
const fs = require('fs');

// 1. 定义自定义Header和Payload
const customHeader = {
  alg: 'RS256', // 必须与公私钥算法匹配,RSA对应RS256/RS384/RS512
  typ: 'JWT',
  // 可添加自定义Header字段,比如kid、x5t等
  kid: 'your-key-id'
};

const customPayload = {
  sub: 'user123',
  name: 'John Doe',
  iat: Math.floor(Date.now() / 1000),
  exp: Math.floor(Date.now() / 1000) + 3600, // 1小时过期
  // 自定义Payload字段
  role: 'admin'
};

// 2. 读取公私钥(也可直接用字符串,注意格式正确)
const privateKey = fs.readFileSync('./private.key', 'utf8'); // 私钥文件路径
const publicKey = fs.readFileSync('./public.key', 'utf8'); // 公钥文件路径

// 3. 生成JWT令牌
function generateCustomJWT() {
  try {
    const token = jwt.sign(
      customPayload,
      privateKey,
      {
        header: customHeader, // 传入自定义Header
        algorithm: 'RS256' // 显式指定算法,与Header中的alg一致
      }
    );
    console.log('生成的令牌:', token);
    return token;
  } catch (error) {
    console.error('生成令牌失败:', error);
    throw error;
  }
}

// 4. 验证令牌(可选,用于确认生成的令牌有效)
function verifyCustomJWT(token) {
  try {
    const decoded = jwt.verify(token, publicKey, { algorithms: ['RS256'] });
    console.log('验证通过,解码内容:', decoded);
    return decoded;
  } catch (error) {
    console.error('令牌验证失败:', error);
    throw error;
  }
}

// 调用示例
const token = generateCustomJWT();
verifyCustomJWT(token);

关键注意事项

  • Header与算法一致性:自定义Header中的alg必须和jwt.sign的algorithm参数一致,且要匹配公私钥的加密类型(RSA对应RS系列算法,ECDSA对应ES系列)。
  • 公私钥格式:确保私钥/公钥是标准PEM格式(包含-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----等标识),格式错误会直接导致签名失败。
  • 自定义字段:Header和Payload中的自定义字段可直接添加,库会原样包含到最终JWT中,和你在jwt.io中配置的效果完全一致。
  • 时间戳规范:Payload中的exp(过期时间)和iat(签发时间)建议使用秒级时间戳,避免时区适配问题。

内容的提问来源于stack exchange,提问作者edencorbin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:30:42