工具
JWT 解码与过期时间检查工具
粘贴 JWT 在浏览器内解码 Header 与 Payload——exp、nbf、iat 并排显示 UTC、北京时间与本地时间,倒计时每秒刷新。只做解码,永不验签。
Token 输入
处理地点:解码全部在此浏览器标签页内完成——token 不发送、不落盘、不写入链接,关闭标签页即丢弃。
只做解码——未验证签名(Signature not verified)。能解析不代表 token 真实可信,切勿依据解析结果做放行判断。
解析结果
| 字段 | 原始值(秒) | UTC | 北京时间(UTC+8) | 本地时间 | 复制 |
|---|---|---|---|---|---|
exp过期时间——超过此刻后不应再接受该 token。 |
|||||
nbf生效时间——此刻之前不应接受该 token。 |
|||||
iat签发时间——token 签发的时刻。 |
解码规则说明
三段结构。紧凑 JWT 形如 header.payload.signature——三个 base64url 段以点号连接。段数不为 3 直接报「段数不对」。开头的 Bearer 前缀(大小写不敏感、与 token 之间可有任意空白)与首尾空白会先剥除再分段。
base64url + UTF-8。每段按 URL 安全字母表解码(-、_ 替代 +、/),缺失的 = 补齐自动完成;长度 mod 4 余 1 或出现非法字符报「base64url 解码失败」。字节按 UTF-8 解释,中文名与 emoji 不乱码。签名段允许为空(未签名 token),但仍按 base64url 校验——本工具永远不拿它验签。
时间字段单位是秒。exp(过期)、nbf(生效)、iat(签发)都是 NumericDate——1970-01-01 UTC 起的秒数。三个字段并排显示 UTC、北京时间(固定 UTC+8)与浏览器本地时区。纯数字字符串(如 "1735689600")按数字接受并标注;布尔、null、对象、数组与非数字字符串直接报错。倒计时每秒刷新:显示「距过期还有」「已过期」或 nbf 未到时的「距生效还有」,并附 iat 签发至今的时长。
可解析 ≠ 已验证。本工具只做解码,不验证签名与签发方。两枚徽章如实表达:「可解析」指结构能解开,「未验证签名」指真实性未知;时间徽章只做 exp/nbf 算术——「未过期」绝不代表 token 可信。全部计算在此标签页内完成:不发送、不落盘、不写入链接、不写 localStorage。相关工具:JSON 结构对比、日志脱敏、JSON ↔ CSV 双向转换。
常见问题
我的 token 会被上传或保存吗?
不会。解码全部在这个浏览器标签页内完成——token 不发送给任何服务器、不落盘、不写入链接、也不进 localStorage,关闭标签页即丢弃。
为什么不顺便验证签名?
验签需要签发方的密钥或公钥,把这些机密粘进网页本身比解码风险更大。本工具刻意只解码:徽章始终显示「可解析」与「未验证签名」——能读出 payload 不证明真实性,「未过期」也绝不代表 token 可信。
exp、nbf、iat 是什么单位?
NumericDate——1970-01-01 UTC 起的秒数(不是毫秒)。exp 是过期时刻、nbf 是生效时刻、iat 是签发时刻。每个字段并排显示 UTC、北京时间(固定 UTC+8)与浏览器本地时区;"1735689600" 这类纯数字字符串按数字接受并标注,布尔、null、对象、数组则直接报错。
「尚未生效」是什么意思?
payload 里的 nbf(not before)在未来——此刻之前不应接受该 token,倒计时会显示距生效的剩余时间。exp 已过显示「已过期」,没有 exp 则显示「无过期时间」。
从 Authorization 头复制的 token 解不开?
正常情况下可以:开头的「Bearer 」前缀(大小写不敏感)连同任意空白会自动剥除,首尾空白也一样。仍会报错的只有四类:段数不为 3、含 base64url 之外的字符或长度 mod 4 余 1、段内容不是合法 JSON、时间字段不是数字——每类都有独立错误提示。