🏠 首页 › 攻略 › JWT Token 解码实战:3步看懂登录失效的真正原因

JWT Token 解码实战:3步看懂登录失效的真正原因

JWT Token 报错看不懂?本文教你3步在线解码 JWT,解析 Header、Payload、Signature 三部分,定位登录失效、权限不足的真正原因,附常见错误排查清单。

接口突然返回 401 Unauthorized,日志里只有一串 eyJhbGci... 的 Base64 字符。

这是新手最常卡住的地方:JWT 到底长什么样?里面藏了什么?为什么昨天还能登录,今天就失效了?

别慌。JWT 其实没有想象中神秘,拆开看只有 3 部分。3 分钟就能看懂,再也不会对着报错干瞪眼。

JWT 长什么样

JWT 是三段用 . 分隔的字符串:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 . eyJ1c2VyIjoiemhhbmcifQ . c9c0c0a...
└──────── Header ───────────────┘  └──── Payload ────┘  └ Signature ┘

三段分别是:

  • Header:算法类型(HS256/RS256)和 Token 类型
  • Payload:真正的业务数据,比如用户 ID、权限、过期时间
  • Signature:用密钥对前两段做签名,防止篡改

重点说一个误区:Payload 只是 Base64 编码,不是加密。任何人拿到 Token 都能直接解码看内容。所以密码、身份证这类敏感信息,永远不要塞进 Payload。

3步解码:不用装任何东西

第 1 步:复制 Token

从请求头 Authorization: Bearer <token> 里复制,注意去掉 Bearer 前缀。

第 2 步:在线解码

把 Token 粘贴到 navbox JWT 解码器,Header 和 Payload 立刻变成可读的 JSON:

{
  "sub": "10086",
  "roles": ["editor"],
  "exp": 1795555200,
  "iat": 1795468800
}

第 3 步:把 exp 时间戳转成人话

Payload 里的 exp(过期时间)是 Unix 时间戳,直接看是个大数字没意义。用 时间戳转换工具 一查:

1795555200 → 2026-11-24 08:00:00 UTC

对比当前时间,是不是过期了,一目了然。

常见报错对照表

报错大概率原因排查动作
401 Token expiredexp 早于当前时间转时间戳确认,检查签发逻辑
401 Invalid signature密钥不匹配确认服务端和校验端用的 secret 一致
403 ForbiddenToken 有效但权限不够看 Payload 里的 roles/permissions 字段
400 Malformed tokenToken 被截断或多了空格复制时小心,别带换行

注意一个细节:JWT 解码器只能解码,不能验签。Signature 对不对,要看服务端的密钥。所以"解出来内容正常"≠“这个 Token 一定合法”,两件事要分清。

排查登录失效的标准流程

  1. 拿最新请求的 Token,先解码看 exp
  2. exp 没过期却 401 → 去查 iat(签发时间),对比密钥是否最近改过
  3. 403 而不是 401 → 权限问题,看 Payload 的角色字段
  4. 所有 Token 都失效 → 多半是服务端密钥轮转或时钟不同步

把 token 发我看看,基本 30 秒定位问题。你先试一次,把解码后的 Payload 截图存下来,下次报错直接对照,比翻代码快多了。