JWT 调试工具:解码、验证 JSON Web Token 完全指南

工具 次閱讀

什么是 JWT?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全传递信息。它被广泛用于 Web 应用的身份认证和授权,是目前最流行的无状态认证方案。

一个 JWT 看起来像这样(三段 Base64URL 编码,用点分隔):

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4iLCJpYXQiOjE1MTYyMzkwMjJ9.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT 的三部分结构

  • Header(头部):声明 Token 类型(JWT)和签名算法(如 HS256、RS256)
    {"alg": "HS256", "typ": "JWT"}
  • Payload(载荷):包含声明(Claims),即要传递的信息,如用户 ID、角色、过期时间
    {"sub": "1234567890", "name": "John", "exp": 1716076800}
  • Signature(签名):对 Header + Payload 用密钥签名,用于验证 Token 未被篡改

重要:Payload 只是 Base64 编码,不是加密。任何人都可以解码查看内容,因此不要在 Payload 中存储密码等敏感信息。

使用 JWT 调试工具

使用 tool.tl 的 JWT 调试工具

  1. 访问 tool.tl/jwt-debugger
  2. 粘贴 JWT Token 到输入框
  3. 工具自动解码并显示 Header 和 Payload 内容(不需要密钥)
  4. 可选:输入密钥验证签名是否有效

所有解码操作在浏览器本地完成,Token 不会上传服务器,保障安全。

常用 JWT Claims 说明

Claim含义示例值
subSubject,Token 主体(通常是用户 ID)"user_123"
expExpiration,过期时间(Unix 时间戳)1716076800
iatIssued At,签发时间1716073200
issIssuer,签发方"api.example.com"
audAudience,受众(哪个服务可以使用此 Token)"frontend-app"
jtiJWT ID,Token 的唯一标识(用于防止重放攻击)"abc123"

JWT 常见安全问题

  • 算法混淆攻击:早期实现中存在将算法改为 none 绕过签名验证的漏洞。始终在服务端强制指定允许的算法,拒绝 none
  • 密钥泄露:HS256 使用对称密钥,如果密钥泄露,攻击者可以伪造任意 Token。生产环境建议使用 RS256(非对称加密)
  • Token 过期时间过长:exp 设置过大(如 30 天)增加 Token 被盗用的风险,建议短期 Token(1–24 小时)配合刷新 Token 机制
  • 敏感信息在 Payload:Payload 只是编码,不是加密,不要存密码、身份证号等敏感信息

代码中使用 JWT

# Python (PyJWT)
import jwt

# 签发 Token
token = jwt.encode({"sub": "user_123", "exp": 1716076800}, "secret", algorithm="HS256")

# 验证并解码
data = jwt.decode(token, "secret", algorithms=["HS256"])

# JavaScript (jsonwebtoken)
const jwt = require('jsonwebtoken');
const token = jwt.sign({ sub: 'user_123' }, 'secret', { expiresIn: '1h' });
const data = jwt.verify(token, 'secret');

常见问题

JWT 和 Session 有什么区别?

Session 在服务器端存储状态(需要数据库查询),JWT 是无状态的(所有信息在 Token 中)。JWT 适合分布式系统和微服务,不需要服务器端状态管理;Session 适合需要即时撤销权限的场景(JWT 在过期前无法撤销)。

JWT 能伪造吗?

在不知道签名密钥的情况下,无法伪造有效的 JWT(前提是使用了安全的算法且密钥足够强)。但 Payload 内容可以被任何人解码读取——签名保证的是完整性,不是保密性。

工具是免费的吗?

是的,tool.tl 的 JWT 调试工具完全免费,所有操作在浏览器本地完成,Token 不会上传服务器。