JWT 怎么解码和检查过期时间?Header、Payload、exp、iat 指南
JWT 登录失效、token 看不懂、exp 时间不对?这篇讲清楚 JWT Header、Payload、签名、过期时间字段和本地解码排查方法。
打开配套工具 →JWT 常用于登录态、接口鉴权和临时授权。它看起来像三段用点分开的字符串:
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 时间戳,不是毫秒。比如:
{
"sub": "user_123",
"iat": 1783411200,
"exp": 1783497600
}如果时间看不懂,可以用 时间戳转换工具 转成本地时间。
登录一会儿就掉线怎么排查
JWT 登录失效常见原因:
exp设置太短。- 秒和毫秒搞混。
- 服务器时间不准。
- 刷新 token 逻辑失败。
- 前端缓存了旧 token。
- 后端 secret 或公钥换了。
排查时先解码 token,看 exp 是否真的已经过期。如果没过期,再看后端验证日志。
Header 里的 alg 要注意
Header 里常见:
{
"alg": "HS256",
"typ": "JWT"
}alg 表示签名算法。后端验证时应该固定允许的算法,不要完全相信 token 自己声明的算法。
如果你在调试签名或验证,可以使用 JWT 签名 / 验证工具,但真实系统仍然要在后端安全处理密钥。
JWT 里不应该放什么
不要在 Payload 放:
- 密码。
- 身份证号。
- 手机验证码。
- 私密地址。
- API Key。
- 不能让用户看到的权限细节。
JWT 默认可读。它适合放“后端愿意让客户端知道的声明”,不适合当加密容器。
总结
JWT 排查先看结构,再看时间,再看签名验证。解码可以帮助你理解 token 内容,但不能代替后端验证。
你可以用 JWT 解码工具 查看 Header / Payload,用 时间戳转换工具 检查 exp / iat,再根据后端日志确认签名和权限问题。