JWT 解码工具
粘贴 JWT 立即解码 Header / Payload / Signature 三段,自动 base64url 解码并 JSON 美化,
识别 iss/sub/aud/exp/iat/nbf/jti 等标准声明字段,显示算法说明、过期状态、
相对时间(剩余/已过期 X 天 Y 小时)、对象/数组字段美化、
签名长度参考,并对 alg=none 不安全算法显眼警告。仅解码展示,不验证签名真实性。
输入即自动解码。仅解码展示,不验证签名真实性。
常见问题
JWT 是什么?由哪几部分组成?
JWT(JSON Web Token)是一种用于在两方之间安全传递声明的开放标准(RFC 7519),常见于身份认证与信息交换。
JWT 由 三段用 . 分隔组成:Header.Payload.Signature。
Header(头部)描述令牌类型与签名算法,如 {"alg":"HS256","typ":"JWT"};
Payload(载荷)携带声明(claims),如用户 ID、签发者、过期时间等;
Signature(签名)是服务器用密钥对 Header + Payload 计算出的摘要,用于防篡改。
前两段均为 base64url 编码的 JSON,可直接解码查看;第三段是二进制签名的 base64url 表示。
这个工具会验证签名吗?
不会。本工具仅做解码展示,不持有服务器密钥,无法验证签名真实性。 解码成功只代表 JWT 格式正确、base64url 可还原,不代表令牌可信。 如需验签,需在服务端用对应算法与密钥重新计算签名并比对。请勿仅凭解码成功就信任令牌内容, 尤其在调试从客户端传来的令牌时,攻击者可任意伪造 Header 与 Payload。
JWT 的常见算法 HS256 / RS256 / ES256 有什么区别?
HS256(HMAC + SHA-256):对称密钥算法,签发与验签用同一密钥,性能高、实现简单,
适合单方服务(如内部系统);缺点是密钥泄露后可任意伪造。
RS256(RSA + SHA-256):非对称算法,私钥签发、公钥验签,适合多方协作(如 OAuth2、SAML),
公钥可公开分发;缺点是 RSA 密钥较长、计算稍慢。
ES256(ECDSA + SHA-256):基于椭圆曲线的非对称算法,与 RS256 同等安全强度下密钥更短、
计算更快,是现代 JWT 实现的推荐选择。
另有 none 算法表示无签名,仅用于调试,严禁用于生产。
JWT 的标准声明字段有哪些?
RFC 7519 定义了 7 个标准声明(claims):
iss(issuer,签发者)、sub(subject,主题,通常是用户 ID)、
aud(audience,受众,目标服务)、exp(expiration,过期时间,Unix 秒级时间戳)、
nbf(not before,生效时间)、iat(issued at,签发时间)、
jti(JWT ID,唯一标识,用于防重放)。
此外常见的非标准声明有 name、email、role、scope 等,
可由签发方自定义。本工具会高亮标准声明字段并显示中文说明。
JWT 的 exp 字段是秒还是毫秒?
JWT 标准规定 exp、iat、nbf 均为 Unix 秒级时间戳
(自 1970-01-01 00:00:00 UTC 起的秒数)。这与 JavaScript Date.now() 返回的毫秒级时间戳不同,
转换时需乘以 1000。本工具自动按秒级解析并显示本地化时间。若你的 JWT 用了毫秒级(非标准),
本工具显示的时间会是 1970 年附近,可据此识别非标准实现。
base64url 和 base64 有什么区别?
base64url 是 base64 的 URL 安全变体,差异在两个字符与 padding:
base64 中的 + 在 URL 中会被解析为空格,/ 是路径分隔符,都会破坏 URL;
base64url 用 - 替换 +,用 _ 替换 /,
并通常省略末尾的 = padding。解码时需还原:把 - 转回 +、
_ 转回 /,并按 4 的倍数补 =。本工具自动处理这些转换。
为什么我的 JWT 解码后是一堆乱码?
常见原因:1) 看错了段:第三段是 Signature(二进制签名的 base64url),
解码后是乱码是正常的,本工具不对 Signature 段做 JSON 解析,仅展示原始字符串;
2) token 损坏:复制时多了空格或换行,或被截断;
3) 不是 JWT:如 SAML token、opaque token、加密的 JWE 等,JWE 通常以 5 段开头
(eyJ... 后跟 . 分隔的多段),结构与 JWT 不同。
工具如何识别 alg=none 不安全 token?
当 JWT Header 的 alg 字段为 none 时,表示令牌无签名,
任何人都能伪造 Payload 内容。RFC 7519 明确允许此算法仅用于调试,严禁生产使用。
本工具检测到 alg=none 后会在解码区顶部显示红色安全警告横幅,提示用户切换到
HS256 / RS256 / ES256 等带签名的算法。点击「不安全示例」按钮可载入演示 token 体验此功能。
常见攻击场景:服务端未严格校验 alg 字段,攻击者把 Header 中的 "alg":"HS256"
改为 "alg":"none" 并清空签名段,若服务端信任客户端传入的 alg 就会跳过验签。
防御:服务端必须硬编码允许的算法白名单,不读取 token 自身声明的 alg。详见
JWT 安全实践。
exp / iat / nbf 字段的相对时间怎么算的?
JWT 标准声明 exp(过期时间)、nbf(生效时间)、iat(签发时间)
均为 Unix 秒级时间戳。本工具除显示本地化的绝对时间(如 2026/1/1 12:00:00)外,
还会显示相对时间徽章,方便快速判断令牌时效状态:
- exp 未来时间显示「剩余 X 天 Y 小时」(绿色徽章)
- exp 已过期显示「已过期 X 天 Y 小时」(红色徽章)
- nbf 未来时间显示「剩余 X 天 Y 小时」(生效前)
- iat 历史时间显示「X 天前」(签发距今多久)
相对时间每秒重新计算(输入变化时触发),无需刷新页面。
拆分规则:1 天 = 86400000 毫秒,1 小时 = 3600000 毫秒,1 分钟 = 60000 毫秒。
签名长度参考有什么用?
不同算法的 JWT 签名段在 base64url 编码后字符数有固定或常见范围:
- HS256:约 43 字符(256 位 HMAC,32 字节 base64url 后)
- HS384:约 64 字符(384 位 HMAC)
- HS512:约 86 字符(512 位 HMAC)
- RS256/384/512:约 344 字符(2048 位 RSA 签名,长度取决于密钥)
- ES256:约 86 字符(256 位 ECDSA,64 字节 r+s)
本工具在 Signature 段下方显示「当前签名长度 N 字符 · 算法预期 约 M 字符」,
当实际长度远小于预期(< 10 字符)时额外提示「签名过短,可能已被截断」,
帮助开发者快速识别 token 复制不完整或被中间件截断的问题。
注意:RSA/ECDSA 签名长度取决于密钥长度,预期值仅供参考。
数据会上传到服务器吗?
不会。本工具完全在浏览器内运行,所有 base64url 解码、JSON 解析、过期检查逻辑由 JavaScript 在你本地执行, 输入的 JWT 内容不会发送到任何服务器。这对你调试真实业务的 token 尤为重要——令牌可能含用户信息, 本地处理可避免泄露。但请注意:JWT 一旦泄露给他人(如截图、复制粘贴),他人可解码查看全部内容, 因此 JWT 不应携带敏感信息(如密码、身份证号),即使有签名保护。