JWT 解码+过期时间检查:exp、nbf、iat、iss、aud 怎么排查
围绕接口 401/403、Token 过期、Issuer/Audience 不匹配和 HMAC 验签,说明如何本地解码 JWT 并复核注册声明。
这个页面解决什么问题
排查 JWT 问题时,不要只看 payload 能不能解出来。还要看 exp 是否过期、nbf 是否尚未生效、iat 是否异常、iss/aud 是否和服务端期望一致,以及 HS256/384/512 签名是否通过。
推荐使用步骤
- 先去掉 Authorization: Bearer 前缀,只保留三段式 JWT,或直接粘贴完整 Bearer 文本。
- 查看 Header 的 alg 和 typ,警惕 alg=none 或和服务端配置不一致。
- 检查 exp、nbf、iat 的本地时间和相对状态,必要时设置时钟偏移分钟。
- 填写期望 iss 和 aud,对比当前 token 是否来自正确环境和应用。
- 如果是 HMAC 算法,输入测试密钥做签名校验;生产密钥不要粘贴到任何不可信页面。
输入输出示例
输入
Token payload 包含 sub=123、iss=gratia、aud=tool、exp=未来 1 小时、iat=当前时间;期望 iss 填 gratia。
输出
结果显示 Header、Payload、注册声明表、过期时间、本地时间、iss 匹配状态;未填密钥时提示仅解码未验签。
关键检查点
时间声明
exp、nbf、iat 都是 UTC 秒,页面会换算成本地时间并显示相对状态,便于排查 401/403。
签名校验
填写 HMAC 密钥后可校验 HS256、HS384、HS512;没有密钥时只能说明“已解码”,不能说明“可信”。
iss/aud
多环境联调常见问题是 issuer 或 audience 配错,页面可填写期望值并提示匹配状态。
安全提醒
不要在不可信环境粘贴生产敏感 token;本页本地处理,但 token 本身仍可能代表账号权限。
和普通同类工具的区别
普通 JWT 解码器只展示 JSON,这个页面把时间状态、iss/aud 对比、HMAC 验签、Bearer 复制和注册声明表放在一个排查流程里。
FAQ
JWT 会发送到服务器吗?
不会。解码、时间检查和 HMAC 验签都在浏览器本地执行。
为什么解码成功不代表 token 有效?
JWT payload 本来就是 Base64URL,可被任何人读取;只有签名、时间和声明都通过才更接近有效。
支持 RS256 验签吗?
当前重点支持 HMAC 系列。RS256 需要导入公钥格式,后续可继续扩展。
过期判断按哪个时区?
JWT 时间戳是 UTC 秒,页面会换算成本地时间并显示还有多久或已过多久。