跳到主要内容

JWT 解析

查看 Header 与 Payload 内容、有效期状态与声明含义

三段内容完整展开,Header 与 Payload 格式化显示时间声明自动换算为北京时间,并判断是否过期识别 alg=none 等不安全配置并明确警告明确标注「已解析但未验签」,不造成误解

最后更新:2026-10-10

工具介绍

JWT 内容本身是 Base64URL 编码,不是加密 —— 任何人拿到都能解开看到里面装了什么,这正是调试时最需要的能力。本工具把三段内容完整展开,并把 iat、exp、nbf 这些时间声明换算成可读时间、判断当前是否有效,省去手动转换时间戳的步骤。

功能特性

三段完整解析

Header 与 Payload 以格式化 JSON 展示,Signature 给出十六进制表示便于对照,每一段都能单独复制。

时间声明可视化

iat(签发时间)、exp(过期时间)、nbf(生效时间)自动从 Unix 秒换算成可读时间,并显示「还有 2 小时过期」这样的相对描述。

有效期状态判断

综合 nbf 与 exp 给出「在有效期内 / 已过期 / 尚未生效 / 未设置过期时间」四种状态,排查登录问题时一眼就能看出是不是时间的问题。

不安全配置警告

alg 为 none 表示 token 没有签名,内容可被任意篡改。这类配置是严重的安全隐患,工具会明确警告而不是只把值显示出来。

UTF-8 正确处理

Base64URL 先还原成字节再按 UTF-8 解码。payload 里含中文或 emoji 时不会出现乱码 —— 这是很多简单实现容易踩的坑。

容错输入

粘贴时带上 Bearer 前缀、多余空格或换行都能正确识别;三段结构不对、Base64 非法、JSON 格式错误会分别给出具体原因。

怎么用

  1. 1

    粘贴 token

    从浏览器开发者工具或日志里复制完整 JWT。带不带 Bearer 前缀都可以,工具会自动识别。

  2. 2

    查看三段内容

    Header 里有签名算法与类型,Payload 里是实际携带的业务数据 —— 这两段都是明文可读的。

  3. 3

    核对时间声明

    如果用户反馈「刚登录就提示过期」,先看 exp 与相对时间;如果是「token 不能用」,再看 nbf 是不是还没到。

  4. 4

    检查算法配置

    确认 alg 是你预期的算法。若看到 none 或意外的算法名,说明服务端配置可能有问题。

参数说明

Header
通常包含 alg(签名算法,如 HS256、RS256)与 typ(类型,一般为 JWT)。也会放 kid 用于指示用哪个密钥。
Payload
承载实际数据,由一组「声明」构成。标准声明有约定含义,你也可以放任意自定义字段,但要注意这部分是明文,不要放敏感信息。
Signature
用 Header 指定的算法对前两段签名得到的值。它的作用是防篡改,验证需要密钥 —— 因此本工具只展示不验证。
iss(签发者)
标识谁签发了这个 token,通常是服务端的域名或应用名。验证时应核对是否与预期一致。
sub(主体)
标识这个 token 关于谁,通常放用户 ID。注意它和用户 ID 不必相同,取决于签发方约定。
aud(受众)
标识这个 token 是给谁用的。防止 A 服务的 token 被拿到 B 服务去用。
exp(过期时间)
Unix 秒时间戳,超过该时刻 token 失效。注意这是由签发方声明的,不代表服务端一定会检查。
nbf(生效时间)
Unix 秒时间戳,早于该时刻 token 不应被接受。用于避免时钟偏差导致的误判。
iat(签发时间)
Unix 秒时间戳,记录 token 何时生成。可用于判断 token 的新旧,但不等于过期时间。
jti(JWT ID)
token 的唯一标识,常用于实现「一次性 token」或撤销名单。

适用场景

  • 排查登录后立刻提示 token 过期的问题
  • 确认服务端返回的 token 里带了哪些用户信息
  • 检查 alg 是否为预期算法,是否存在 none 的配置错误
  • 核对 exp 时长是否符合产品的登录保持策略
  • 从别人的 token 里读出签发者、受众等路由信息
  • 学习 JWT 结构时直观查看三段内容
  • 确认 token 里没有意外泄漏敏感字段

常见问题

关于这个工具,你可能会问

JWT 是加密的吗?为什么我能看到内容?

不是加密,只是 Base64URL 编码。编码只是换一种书写形式,任何人都能还原;加密才需要密钥才能解开。JWT 的安全性来自签名 —— 签名能保证内容未被篡改,但**不保证内容保密**。所以千万不要把密码、身份证号等敏感信息放进 payload。

为什么这个工具不验证签名?

因为验签需要密钥,而密钥绝不应该出现在浏览器端。更现实的问题是:如果工具要求你输入密钥,那个密钥就已经泄露给第三方了。所以本工具明确只做解析。要验签请在服务端用可信的库完成。

alg=none 是什么?为什么危险?

它表示这个 token 没有签名。如果服务端实现不严谨(错误地接受了 none),攻击者只要把 alg 改成 none 并自行修改 payload,就能伪造出任意身份的 token。这是 JWT 历史上最著名的漏洞之一,生产环境必须显式拒绝 none。

exp 没过期就一定能用吗?

不一定。exp 只是 token 自己声明的有效期,服务端完全可以不检查、或者检查另外的规则(比如撤销名单、用户状态变更)。另外服务端与客户端时钟不一致也可能导致误判。本工具的状态判断仅供参考,真正的结论要看服务端行为。

HS256 和 RS256 有什么区别?

HS256 是对称算法,签名与验证用同一个密钥;RS256 是非对称算法,用私钥签名、公钥验证。多服务场景下 RS256 更合适 —— 验证方只需要公钥即可,不必持有能签名的私钥。选哪个取决于架构,但都要确保密钥不出现在前端。

payload 里的字段是固定的吗?

不是。只有 iss、sub、aud、exp、nbf、iat、jti 这七个是标准声明,其余都是签发方自定义的。甚至标准声明也全是可选的 —— 一个 JWT 的 payload 完全可以是空对象 {}。所以不要假设某个字段一定存在。

为什么解析出来的内容不是 JSON 对象?

说明这很可能不是一个正常的 JWT,或者 token 在复制过程中被截断了。标准的 Header 与 Payload 都是 JSON 对象(以 { 开头),如果解出来是数组、字符串或解析失败,通常意味着 token 不完整或被替换过。

粘贴 token 到在线工具有风险吗?

有。虽然本工具完全在浏览器本地解析、不发送任何数据(你断开网络也能用),但风险在于你无法轻易验证任何在线工具的这一承诺。因此我们的建议是:不要粘贴生产环境的真实 token,要用就用测试环境的。