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.SignatureHeader(头部)描述令牌类型与签名算法,如 {"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,唯一标识,用于防重放)。 此外常见的非标准声明有 nameemailrolescope 等, 可由签发方自定义。本工具会高亮标准声明字段并显示中文说明。

JWT 的 exp 字段是秒还是毫秒?

JWT 标准规定 expiatnbf 均为 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 不应携带敏感信息(如密码、身份证号),即使有签名保护。