未填写 Secret,签名仅保留原值,修改内容后通常无法验签通过
工具说明
关于 JWT 解析器
JWT Parser 用来解码 JSON Web Token 的 Header 和 Payload,查看 alg、typ、签名状态以及 iss、sub、aud、iat、nbf、exp 等常见 claims。
此工具在浏览器本地解析令牌,并可使用本地 HMAC 密钥重新签名编辑后的 Header/Payload;它不会把令牌上传到 wetool.site。
如何使用 JWT Parser
- 粘贴完整 JWT,格式应为 header.payload.signature 三段。
- 点击 Decode,查看 Header、Payload 和常见声明摘要。
- 检查 exp、nbf、iat 是否符合预期;它们通常是以秒为单位的 Unix 时间。
- 如果要测试编辑后的 HMAC token,输入 secret 后会在浏览器本地重新签名。
常见使用场景
- 调试登录态时快速确认 token 是否已经过期或尚未生效。
- 检查 alg、typ、iss、aud、sub 是否与 API 网关或后端服务约定一致。
- 把 payload 格式化成可读 JSON,定位 scope、role、tenant_id 等业务字段。
- 修改测试 token 的 claim 后,用本地 secret 重新签名用于开发环境验证。
JWT 结构、claims 和签名边界
JWT 通常由三个 Base64URL 片段组成: Header、Payload、Signature。解码 Header/Payload 不需要 secret,但判断签名可信必须在服务端或持有正确密钥的环境中完成。
- Header: 通常包含 alg 和 typ,说明签名算法和 token 类型。
- Payload: 保存 claims,例如 iss、sub、aud、iat、nbf、exp 和业务字段。
- 签名:用于防止 Header/Payload 被篡改;只解码令牌不代表签名有效。
- 时间 claims: iat、nbf、exp 通常是 Unix 秒,不是毫秒。
JWT 解析常见问题
- Decode JWT 等于验证 JWT 吗?
- 不等于。Decode 只是读取 Header 和 Payload;验证需要用正确密钥或公钥检查 signature。
- 为什么 payload 能直接看到?
- JWT 的 Header 和 Payload 是 Base64URL 编码,不是加密。不要把秘密信息放进普通 JWT payload。
- exp、iat、nbf 是什么?
- exp 是过期时间,iat 是签发时间,nbf 是生效时间,常见格式是 Unix 秒。
- 修改 Payload 后 token 还能用吗?
- 没有重新签名通常不能用。此工具在填写 HMAC secret 后可本地重新签名测试 token。
- JWT 会上传吗?
- 不会。解码、编辑和 HMAC 重新签名都在浏览器本地运行,token 不会上传到 wetool.site。
JWT 与 Session 的区别
会话通常把状态保存在服务端,只给浏览器一个会话 ID。JWT 把声明放在令牌中,适合跨服务传递身份信息,但更需要谨慎控制过期时间、签名密钥和载荷内容。
JWT 签名验证与 alg 排错清单
JWT 能被解码不代表它可信。真正的验证必须确认算法、密钥来源、issuer、audience 和 signature 都符合后端策略。
- 不要根据 token 自带的 alg 盲目选择验证算法;服务端应使用配置好的允许算法列表。
- 看到 alg=none、HS256/RS256 混用或 kid 指向外部地址时,要按高风险配置处理。
- 本工具适合查看和生成 HMAC 测试 token,生产验签仍应在后端或认证网关完成。
exp、nbf、iat 时间排错
JWT 时间 claim 通常是 Unix 秒。过期判断异常时,先排除秒/毫秒、时钟偏移和时区显示问题。
- exp 早于当前 Unix 时间(秒)时令牌已过期;nbf 晚于当前时间时令牌尚未生效。
- 把 13 位毫秒误当作秒会得到遥远未来时间,把 10 位秒误当作毫秒会落到 1970 年附近。
- 服务端之间应保持 NTP 同步,并允许少量 clock skew,但不要用过长宽限期掩盖配置问题。