JWT 在线解析与 Token 校验工具
快速拆解 JSON Web Token (Header / Payload / Signature),检测有效载荷、签发时间与过期时效。纯浏览器本地解码,保护 Token 隐私。
阿里云爆款云服务器 · 开发者上云特惠 99元/年起
2核2G/2核4G 高性能轻量服务器、OSS 对象存储与云数据库限时特价,专属通道直达优惠。
// 待解码 HEADER// 待解码 PAYLOADJWT 标准有效载荷声明 (Standard Registered Claims)
依据 RFC 7519 规范定义的常用保留字段及其业务用途。
| 声明键名 | 英文全称 | 中文释义与规范 | 典型取值示例 |
|---|---|---|---|
| iss | Issuer | 令牌签发者实体标识 | "https://aijson.top" |
| sub | Subject | 主题,通常为用户的唯一 UID 或账户标识 | "user_9527" |
| exp | Expiration Time | 过期时间戳(精确到秒),超过该时刻 Token 失效 | 1787919888 |
| nbf | Not Before | 生效起始时间戳(精确到秒),在此时间前 Token 不可用 | 1715900000 |
| iat | Issued At | 令牌的签发时间戳(精确到秒) | 1715900000 |
| jti | JWT ID | 令牌唯一编号,常用于防重放攻击与服务端下线拉黑 | "c8f0e5b7-789a..." |
常见编程语言 JWT 签发与校验代码速查
Node.js、Python、Go 与 Java 主流后端框架中的 JWT 规范实现。
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);
}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 已过期")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"]
}// 校验 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'])。