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

寻求支持JWT与Ed25519密钥签名JSON对象的Node.js库

实现JWT Ed25519(EdDSA)签名的Node.js方案

一、使用jose库(官方推荐)

jwt.io提到的jose库确实完全支持EdDSA算法,只是它的API和你熟悉的传统jwt库略有不同,以下是贴合你需求的实现代码:

  1. 先安装依赖:
npm install jose
  1. 生成Ed25519密钥对(也可以从本地PEM/JWK文件加载):
import { generateKeyPair } from 'jose';

// 生成密钥对
const { privateKey, publicKey } = await generateKeyPair('EdDSA');
  1. 签名JWT(接近你期望的写法):
import { SignJWT } from 'jose';

const payload = { foo: 'bar' };
const signedJwt = await new SignJWT(payload)
  .setProtectedHeader({ alg: 'EdDSA' }) // 指定EdDSA算法
  .sign(privateKey);
  1. 验证签名:
import { jwtVerify } from 'jose';

const { payload } = await jwtVerify(signedJwt, publicKey);
console.log(payload.foo); // 输出 'bar'

二、备选方案:node-jose库

如果习惯更偏向传统JWS操作的API,可以用node-jose:

  1. 安装依赖:
npm install node-jose
  1. 签名示例:
const jose = require('node-jose');

// 假设privateKey是PEM格式或JWK对象
const payload = { foo: 'bar' };
const signedJwt = await jose.JWS.createSign({ alg: 'EdDSA' }, privateKey)
  .update(JSON.stringify(payload))
  .final();

三、不推荐:自定义实现(仅作参考)

如果一定要手动实现,Node.js 16+的crypto模块原生支持Ed25519签名,但需要自己处理JWT的Base64URL编码和格式拼接,示例如下:

  1. 安装base64url依赖(用于JWT的URL安全编码):
npm install base64url
  1. 自定义签名代码:
const crypto = require('crypto');
const base64url = require('base64url');

// 生成Ed25519密钥对
const { privateKey, publicKey } = crypto.generateKeyPairSync('ed25519');

// 构造JWT的header和payload
const header = { alg: 'EdDSA', typ: 'JWT' };
const payload = { foo: 'bar' };

// 编码为URL安全的Base64
const encodedHeader = base64url(JSON.stringify(header));
const encodedPayload = base64url(JSON.stringify(payload));
const signingInput = `${encodedHeader}.${encodedPayload}`;

// 生成签名并编码
const signature = crypto.sign(null, Buffer.from(signingInput), privateKey);
const encodedSignature = base64url(signature);

// 拼接成完整JWT
const signedJwt = `${encodedHeader}.${encodedPayload}.${encodedSignature}`;

注意:自定义实现容易在编码、算法细节上出错,建议优先使用成熟库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:15:08