JWT 在线解析与 Token 校验工具

快速拆解 JSON Web Token (Header / Payload / Signature),检测有效载荷、签发时间与过期时效。纯浏览器本地解码,保护 Token 隐私。

纯本地解码 · Token 永不上传
开发者特惠 阿里云官方合作专区

阿里云爆款云服务器 · 开发者上云特惠 99元/年起

2核2G/2核4G 高性能轻量服务器、OSS 对象存储与云数据库限时特价,专属通道直达优惠。

编码的 JWT 字符串 (Encoded):
HEADER: 算法 & 类型等待输入
// 待解码 HEADER
PAYLOAD: 数据载荷 (Claims)
// 待解码 PAYLOAD
签名状态 (Signature):未检测到签名
客户端安全校验

JWT 标准有效载荷声明 (Standard Registered Claims)

依据 RFC 7519 规范定义的常用保留字段及其业务用途。

声明键名英文全称中文释义与规范典型取值示例
issIssuer令牌签发者实体标识"https://aijson.top"
subSubject主题,通常为用户的唯一 UID 或账户标识"user_9527"
expExpiration Time过期时间戳(精确到秒),超过该时刻 Token 失效1787919888
nbfNot Before生效起始时间戳(精确到秒),在此时间前 Token 不可用1715900000
iatIssued At令牌的签发时间戳(精确到秒)1715900000
jtiJWT ID令牌唯一编号,常用于防重放攻击与服务端下线拉黑"c8f0e5b7-789a..."

常见编程语言 JWT 签发与校验代码速查

Node.js、Python、Go 与 Java 主流后端框架中的 JWT 规范实现。

Node.js (jsonwebtoken)npm
const jwt = require('jsonwebtoken');

// 签发 Token (设置 2 小时过期)
const token = jwt.sign({ uid: 1001, role: 'admin' }, 'secretKey', { expiresIn: '2h' });

// 验签与解码
try {
  const decoded = jwt.verify(token, 'secretKey');
} catch (err) {
  console.error('Token 无效或已过期:', err.message);
}
Python (PyJWT)pip
import jwt, datetime

# 签发 Token
payload = {"uid": 1001, "exp": datetime.datetime.utcnow() + datetime.timedelta(hours=2)}
token = jwt.encode(payload, "secretKey", algorithm="HS256")

# 校验并提取 Payload
try:
    data = jwt.decode(token, "secretKey", algorithms=["HS256"])
except jwt.ExpiredSignatureError:
    print("Token 已过期")
Golang (golang-jwt/jwt/v5)go module
import "github.com/golang-jwt/jwt/v5"

// 解析与验签
token, err := jwt.Parse(tokenStr, func(t *jwt.Token) (interface{}, error) {
    return []byte("secretKey"), nil
})
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
    uid := claims["uid"]
}
Java (jjwt)Maven
// 校验 Token
Claims claims = Jwts.parser()
    .setSigningKey("secretKey".getBytes())
    .parseClaimsJws(jwtToken)
    .getBody();
String subject = claims.getSubject();

JWT 核心安全性与架构设计问答 (FAQ)

敏感数据存放避坑、主动注销登出机制与 None 算法安全防护。

Q1: JWT 是加密的吗?可以在 Payload 中存放用户密码吗?

绝对不能。标准的 JWT (JWS) 仅仅是通过 Base64URL 进行编码和数字签名,它的有效载荷对任何人都是完全透明可见且可被逆向解码的。签名的作用仅用于验证数据在传输过程中是否被第三方篡改,而非隐藏内容。任何密码、银行卡号或敏感手机号都严禁放入 JWT 中(除非采用复杂的 JWE 加密规范)。

Q2: JWT 无状态登录如何实现主动注销(退出登录)与权限吊销?

由于 JWT 是无状态的,只要未达到 exp 过期时间,该 Token 在数学上始终有效。业内主流解决手段包括:
• 双 Token 机制:短期(如 15 分钟)Access Token + 长期 Refresh Token,注销时销毁服务端的 Refresh Token;
• Redis 临时黑名单:注销时将 JWT 的 jti 写入 Redis 并设置剩余过期时间作为 TTL,网关验证时快速拦截;
• 版本号校验 (Token Version):用户修改密码时在数据库将用户 token_version 递增,失效旧版本 Token。

Q3: 什么是著名的 JWT None 算法越权漏洞?

早期的某些 JWT 实现库在校验 Token 时,会完全信任客户端传入的 Header 中的 alg 字段。如果攻击者将 alg 改为 none 并删除末尾的签名部分,一些脆弱的后端库会认为该 Token 无需验签从而直接放行,导致攻击者能够伪造任意用户身份(包括管理员)。现代框架要求服务端必须在验签代码中显式固定算法白名单(如 algorithms: ['HS256'])。