🔑 JWT 解码器

解码 JSON Web Token — 查看头部、载荷和过期时间

✓ 永久免费 · ✓ 无需注册 · ✓ 文件不上传 · ✓ 离线可用

🔒 你的数据绝不会离开你的设备。 所有处理都通过 JavaScript Base64 解码 在浏览器本地完成。无上传、无服务器、无追踪。

功能特点

  • 完整解码 — 解码并展示 JWT 的头部(Header)、载荷(Payload)和签名(Signature)三部分。
  • 过期检查 — 签发时间、生效时间和过期时间都显示为你所在时区的日期,并实时倒计时:有效、已过期或尚未生效。
  • 格式化显示 — 每个声明都按令牌里的原样显示 —— 很长的数字 ID 一位不少,重复的键会被标出来。
  • 完全离线 — 解码在浏览器中完成,令牌不会发送到任何服务器。

使用方法

  1. 粘贴 JWT — 将 JWT 令牌粘贴到输入框中。
  2. 查看解码结果 — 查看头部、载荷和签名信息,以及过期状态。
  3. 复制使用 — 复制解码后的 JSON 数据用于调试。

使用场景

  • 调试 API 认证问题时检查令牌内容
  • 查看 JWT 里的用户信息和权限声明(解码不等于验证)
  • 检查令牌是否已过期或即将过期

常见问题

它会验证 JWT 签名吗?

不会。它只解码令牌、显示里面声明了什么,不校验签名,每个令牌下面都会写明这一点。验证需要签发方的密钥或公钥,应该在你的服务器上做 —— 不要因为能顺利解码就相信令牌里的内容。

把 JWT 粘贴到这里安全吗?

令牌由这个标签页里的 JavaScript 解码,不会发送到任何地方,也不会保存 —— 打开开发者工具的 Network 面板,粘贴时可以看到没有任何请求。不过有效的令牌就像密码,能用测试令牌或已过期的令牌就尽量用它们。

支持哪些 JWT 格式?

标准三段式 header.payload.signature 的签名 JWT(JWS),包括没有签名的 alg "none" 令牌。可以直接粘贴整行 "Authorization: Bearer …"、带引号的字符串或被折行的令牌 —— 多余的部分会被去掉并告诉你去掉了什么。加密令牌(JWE,五段)没有接收方的密钥无法读取;粘贴了这种令牌时页面会提示你。

为什么这里显示 12345678901234567890,别的解码器却显示 12345678901234567000?

因为令牌里写的就是这个。JavaScript 的数字只能精确表示大约 16 位,先解析 JSON 再重新输出的解码器会悄悄改掉长 ID、把 1.10 变成 1.1、丢掉重复的键。这里显示的是令牌自己的文本,只重新缩进,别的什么都不改。

iat、nbf 和 exp 是什么意思?

分别是签发时间、生效时间和过期时间:自 1970 年 1 月 1 日(UTC)起的秒数。页面会把它们显示成你所在时区的日期,并实时倒计时。如果数值是毫秒会被标出来,因为各种库会把它当成几千年后的日期。

来自 Milo 🐨 的笔记

2026-10-05

有个令牌里的用户 ID 是一长串数字,结果这里显示的 ID 和令牌里的不一样:解码器先解析 JSON 再打印出来,JavaScript 悄悄把 12345678901234567890 舍入成了 12345678901234567000。现在显示的是令牌自己的文本,一位不差,重复的键也会标出来。顺手还改了几处:可以直接粘贴整行 "Authorization: Bearer …" 或被折行的令牌;出错时会说清是哪一段坏了;还没到生效时间(nbf)的令牌不再显示“还有 2 小时过期”;倒计时会实时更新;几种奇怪的令牌不会再让整个页面变空白;手机上也能正常显示。另外每个令牌下面都会明确写着:解码不等于验证。

相关教程

相关工具

💬 Bug、点子,或者就想打个招呼? 告诉 Milo 🐨 · [email protected]