首页 › 编程开发 › JWT 解析工具
🔧

JWT 解析工具

在线解析 JWT 头部与载荷,逐条解释声明并本地验证签名

JWT 令牌

令牌只在本机浏览器解码,不会发送到任何服务器。粘贴时多余的空格、引号与 Bearer  前缀会自动去除。

Header 头部
—
—
Payload 载荷
—
—
声明逐条解读
声明值含义与本工具的处理

值列保持令牌中的原始类型:字符串带引号、数字与布尔值不带。自定义声明无法逐一预置含义,会标注为业务方自定义字段。

时间戳换算
声明本地时间相对当前

签名验证

验签在浏览器内用 WebCrypto 完成,密钥不会离开本机。签名验证只证明「内容未被篡改」,令牌能不能用还要看有效期、签发者、受众与业务权限。

工具介绍

调试 JWT 最常见的需求只有两个:看清里面到底装了什么,以及确认它有没有被改过。这个工具把两件事都放在本地浏览器里完成,令牌不必交给任何第三方服务。

  • 三段拆解:Header、Payload、Signature 分别显示解码后的字节数与字符数,结构一眼看清
  • UTF-8 正确还原:中文姓名、带重音的字符按字节解码后还原,不会出现乱码
  • 声明逐条解释:注册声明、OIDC 常用声明与头部参数都给出含义,自定义字段标注为业务约定
  • 有效期换算:exp、nbf、iat、auth_time 同时显示本地时间、UTC ISO 与倒计时,并随秒刷新
  • 本地验签:支持 HS256/384/512、RS256/384/512、PS256/384/512、ES256/384/512,密钥与公钥通过 WebCrypto 在本机运算
  • 公钥格式宽容:PEM 公钥与单个 JWK 都能导入,证书与错误格式会说明原因而不是直接失败
  • 异常输入容错:自动去掉 Bearer 前缀、首尾引号、换行与结尾逗号;两段令牌、空签名、alg:none、载荷不是 JSON、5 段 JWE 都有对应的明确提示
  • 敏感字段提醒:载荷里出现密码、手机号、证件号等键名时提示改用 ID 到服务端查询
  • 示例令牌:有效、已过期、可验签的 RS256、alg=none、非 JSON 载荷五种一键载入

使用场景

  • 接口返回 401 时先确认令牌是否已经过期或受众填错
  • 前端登录后检查 id_token 里的角色、权限范围是否按预期签发
  • 对接第三方登录时核对 iss、aud、kid 与 JWKS 公钥是否匹配
  • 安全自查:alg:none 或不校验签名的服务端配置风险
  • 教学演示:解释为什么 JWT 只防篡改而不防偷看

常见声明速查

声明位置必须校验吗
algHeader要。服务端应固定接受白名单,而不是按令牌自报的算法验签,这正是算法混淆攻击的入口
kidHeader用它选密钥,但要确认密钥来源是自己的 JWKS,而不是 jku 里给的地址
exp / nbfPayload要,并留 30–60 秒时钟偏移容忍
issPayload要精确比对,多环境共用密钥时最容易漏
audPayload要。不校验受众会让给 A 服务的令牌直接访问 B 服务
jtiPayload需要吊销或防重放时才有意义,纯靠有效期做失效通常不够

常见问题

  • 解码成功说明令牌有效吗?不说明。解码只是 Base64URL 还原,任何人不需要密钥都能做。有效性必须由服务端验证签名并检查有效期、签发者与受众
  • 为什么载荷能被明文看到?JWT 只签名不加密。要放敏感内容请改用 JWE(本工具识别到 5 段结构时会说明需要私钥解密),或者只在载荷里放 ID
  • alg=none 是漏洞吗?标准里没有合法的 none 验签流程。风险在于老库会「按令牌声明的算法」验签,于是攻击者把签名去掉并改 alg 就能伪造身份
  • HS256 和 RS256 该用哪个?单个服务自己签发自己验证时 HMAC 更省事;需要把公钥分发给多个验证方(微服务、开放平台)时用 RS256/ES256,避免共享密钥外泄
  • 验签提示需要安全上下文?WebCrypto 只在 https 或 localhost 下可用,通过普通 http 的局域网地址访问时只能解码,不能验签
  • 为什么 exp 显示时间和文档里差 8 小时?令牌里的时间戳是 UTC 秒数,本工具按你本机时区换算,中国时区会显示为 UTC+8

想单独还原某一段 Base64URL 内容请用 Base64 编解码;把 exp 之类的秒数换算成可读日期可用 时间戳转换;解码后的 JSON 需要进一步整理与查重复请使用 JSON 格式化。令牌与密钥全部留在本机浏览器处理,不会上传,也不会写入日志。