JWT 常用于登录态、接口鉴权和临时授权。它看起来像三段用点分开的字符串:

text已剪下 ✓
xxxxx.yyyyy.zzzzz

很多问题都可以先从解码开始看:用户是谁、什么时候签发、什么时候过期、权限字段是否正确。你可以用 JWT 解码工具 在浏览器本地查看 Header 和 Payload。

JWT 三段分别是什么#

JWT 通常由三部分组成:

  • Header:说明算法和 token 类型。
  • Payload:放业务声明,比如用户 ID、角色、过期时间。
  • Signature:签名,用来验证 token 是否被篡改。

解码 Header 和 Payload 不需要密钥,因为它们只是 Base64URL 编码。真正需要密钥的是验证签名。

解码不等于验证#

这是最重要的一点:能解码 JWT,不代表它是真的。

任何人都可以改 Payload 再生成一个看起来像 JWT 的字符串。如果后端不验证签名,就会有严重安全问题。

所以:

  • 前端解码 JWT 只能用于展示和调试。
  • 后端必须验证签名、算法、过期时间和权限。
  • 不要把敏感信息放进 Payload,因为用户可以看到。

exp、iat、nbf 怎么看#

Payload 里常见时间字段:

  • iat:Issued At,签发时间。
  • exp:Expiration Time,过期时间。
  • nbf:Not Before,在这个时间前不可用。

这些字段通常是秒级 Unix 时间戳,不是毫秒。比如:

json已剪下 ✓
{
  "sub": "user_123",
  "iat": 1783411200,
  "exp": 1783497600
}

如果时间看不懂,可以用 时间戳转换工具 转成本地时间。

登录一会儿就掉线怎么排查#

JWT 登录失效常见原因:

  1. exp 设置太短。
  2. 秒和毫秒搞混。
  3. 服务器时间不准。
  4. 刷新 token 逻辑失败。
  5. 前端缓存了旧 token。
  6. 后端 secret 或公钥换了。

排查时先解码 token,看 exp 是否真的已经过期。如果没过期,再看后端验证日志。

Header 里的 alg 要注意#

Header 里常见:

json已剪下 ✓
{
  "alg": "HS256",
  "typ": "JWT"
}

alg 表示签名算法。后端验证时应该固定允许的算法,不要完全相信 token 自己声明的算法。

如果你在调试签名或验证,可以使用 JWT 签名 / 验证工具,但真实系统仍然要在后端安全处理密钥。

JWT 里不应该放什么#

不要在 Payload 放:

  • 密码。
  • 身份证号。
  • 手机验证码。
  • 私密地址。
  • API Key。
  • 不能让用户看到的权限细节。

JWT 默认可读。它适合放“后端愿意让客户端知道的声明”,不适合当加密容器。

总结#

JWT 排查先看结构,再看时间,再看签名验证。解码可以帮助你理解 token 内容,但不能代替后端验证。

你可以用 JWT 解码工具 查看 Header / Payload,用 时间戳转换工具 检查 exp / iat,再根据后端日志确认签名和权限问题。