JWT 解码 / 编码 / 签名

解析 Token、验证签名,也可以自己填写 Header 与 Payload 生成并签名新的 JWT。全部在浏览器本地完成,密钥不会上传。

带意图的直达链接(可复制分享):

把已有 Token 粘贴进来即可查看内容(Header / Payload / 签名段);需要确认 Token 有没有被改过,可在下方填入密钥或公钥就地验签。

粘贴 JWT Token 开始解析

各语言 JWT 示例代码

覆盖 9 种主流语言的常用 JWT 库,包含生成、解码、验签三类写法,可直接复制使用。

用当前 Token / 密钥替换示例占位符PASTE_YOUR_JWT_HERE

jsonwebtoken(Node.js 最常用)

HS256 签名 / 解码 / 验签全流程,RS256 只需换成密钥对并改 algorithm。

// 安装:npm install jsonwebtoken
const jwt = require('jsonwebtoken')
// ESM 写法:import jwt from 'jsonwebtoken'

const secret = 'your-256-bit-secret'

// 1. 生成(签名)Token
const token = jwt.sign(
  { sub: '1234567890', name: 'GEE 用户', admin: true },
  secret,
  { algorithm: 'HS256', expiresIn: '2h' }
)
console.log(token)

// 2. 仅解码查看内容(不校验签名,别用它做鉴权)
console.log(jwt.decode(token))

// 3. 验证签名,并自动校验 exp / nbf
try {
  const payload = jwt.verify('PASTE_YOUR_JWT_HERE', secret, { algorithms: ['HS256'] })
  console.log('验证通过', payload)
} catch (err) {
  // TokenExpiredError / JsonWebTokenError / NotBeforeError
  console.error('验证失败', err.name, err.message)
}

// 4. RS256:私钥签名、公钥验签
// const token = jwt.sign(payload, privateKeyPem, { algorithm: 'RS256' })
// const data  = jwt.verify(token, publicKeyPem, { algorithms: ['RS256'] })

jose(浏览器 / Edge Runtime 通用)

基于 WebCrypto,可在浏览器、Cloudflare Workers、Vercel Edge 中直接使用。

// 安装:npm install jose
import { SignJWT, jwtVerify, decodeJwt } from 'jose'

const secret = new TextEncoder().encode('your-256-bit-secret')

// 1. 生成 Token
const token = await new SignJWT({ name: 'GEE 用户' })
  .setProtectedHeader({ alg: 'HS256', typ: 'JWT' })
  .setIssuedAt()
  .setExpirationTime('2h')
  .sign(secret)

// 2. 验证签名
const { payload, protectedHeader } = await jwtVerify('PASTE_YOUR_JWT_HERE', secret, {
  algorithms: ['HS256']
})
console.log(payload, protectedHeader)

// 3. 只看内容不验签
console.log(decodeJwt(token))