WebTool

JWT 详解:结构、原理与常见误区

WebTool 团队 · 发布于 2026-08-28 · JWT / 认证 / 安全

JWT(JSON Web Token)是一种自包含的令牌格式:三段 Base64Url 文本用点号连接,任何人都能解码,但只有持钥者能伪造。 本文拆解其结构并澄清高频误区。拿到一个 JWT 可以用本站解码工具边看边学。

三段结构

eyJhbGci...  .  eyJzdWI...  .  dBjftJeZ...
   Header         Payload        Signature
  • Header:算法与类型,如 {"alg":"HS256","typ":"JWT"}
  • Payload:声明(claims)。标准声明见下表,其余为自定义业务字段。
  • Signature:对前两段的签名,HMACSHA256(base64(header) + "." + base64(payload), secret)

标准声明

声明 含义 示例
iss 签发者 "https://auth.example.com"
sub 主题(通常是用户 ID) "1234567890"
aud 受众 "web"
exp 过期时间(Unix 秒) 1900000000
nbf 生效时间 1700000000
iat 签发时间 1700000000
jti 令牌唯一 ID(防重放) "abc123"

三个最常见的误区

误区一:解码 = 验证。 Base64Url 只是编码,任何人都能解开 Payload 看到内容——所以 JWT 里不要放密码等敏感信息。验证签名的合法性必须持有密钥。

误区二:JWT 能主动吊销。 无状态意味着服务端默认不存令牌,签发后在 exp 之前一直有效。需要吊销时要引入黑名单/短时效+刷新令牌等机制。

误区三:alg none 无所谓。 2015 年著名的 alg=none 攻击:把算法改为 none 并去掉签名,校验不严的库会直接放行。服务端必须白名单指定算法,禁止从 token 里读算法。

排查"登录态莫名失效"的清单

  1. 解码看 exp 是否已过(工具会自动换算成本地时间);
  2. iat 判断是不是签发了新 token 但前端还在用旧的;
  3. 确认服务端时钟没有漂移(exp/nbf 都依赖时钟)。

最后更新:2026-08-28