Toolify

JWT 解码器 (头部、载荷、签名、过期)

粘贴 JWT 即时将头部和载荷解码为 JSON。识别标准声明 (iat、exp、nbf) 并将 Unix 时间戳转换为 ISO 8601。标记已过期或未生效的 token。

在浏览器内完成解码,token 不会通过网络传输。

头部

{
  "alg": "HS256",
  "typ": "JWT"
}

载荷

{
  "sub": "1234567890",
  "name": "Jane Doe",
  "iat": 1730000000,
  "exp": 4886000000
}
存在签名
签发时间 (iat)
2024-10-27T03:33:20.000Z
过期时间 (exp)
2124-10-30T22:13:20.000Z

工作原理

JWT 的结构

JWT 是用点号连接的三段 Base64url 编码: header.payload.signature。每段是为 URL 安全传输而编码的 JSON。头部声明签名算法,载荷携带声明 (主体、过期、自定义数据),签名让接收方在持有密钥时验证完整性。

本解码器只读前两段。签名是第三段,但验证需要密钥/公钥——这是单独操作,本工具不执行。

值得了解的标准声明

iss (issuer): 签发者。iat (issued at): 签发时间,Unix 时间戳。exp (expiry): 失效时间,Unix。nbf (not before): 最早可被接受的时间。sub (subject): token 代表的实体,通常用户 ID。aud (audience): token 面向的服务,通常服务 URL。

并非全部必需,最小 JWT 常仅包含 sub + iat + exp。自定义声明是其他任意键,与标准声明并列在载荷中。

解码 ≠ 验证

任何人都能解码 JWT —— 头部和载荷只是 Base64 编码的 JSON。所以「不要把秘密放在载荷」: 等同公开信息。

验证意味着用密钥 (HMAC) 或公钥 (RSA/ECDSA) 校验签名。未经验证,载荷中任何声明都不可信 —— 攻击者可伪造任意载荷。

用本工具调试时检查 token,生产环境务必用服务器端 JWT 库验证。

常见问题

可以验证签名吗?

不能 —— 验证需要密钥或公钥,这些不应离开可信环境。请使用服务器端 JWT 库 (Node 的 jsonwebtoken、Python 的 PyJWT 等)。

Token 会上传吗?

永不。解码本地完成,我们没有接收 token 的服务器端口。

为何 token 「无效」?

常见原因: 复制粘贴混入/丢失空白、不足三段、某段为非法 Base64url。修剪后重试。

Base64url 和 Base64 的区别?

Base64url 把 '+' 换 '-'、'/' 换 '_',去掉末尾 '=',让编码字符串在 URL 和 HTTP 头中安全传输。JWT 始终用 Base64url。

为何 Unicode 载荷显示乱码?

本工具按 UTF-8 解码 (标准做法)。如载荷用其他编码,JSON.parse 会失败。大多数 JWT 签发者正确使用 UTF-8。

HS256 安全吗?

若密钥足够长 (≥256 位) 且保密,则安全。常见 HS256 漏洞是弱密钥和接受 alg='none'。使用 ≥32 字符随机密钥,显式拒绝 'none'。

为何用 RS256 优于 HS256?

RS256 (非对称 RSA) 可发布验证用公钥同时保密签名密钥。HS256 (对称 HMAC) 需与每个验证者共享密钥。多服务架构下 RS256 更安全。

可以解码巨大 token 吗?

实际上限约 10 MB,超过浏览器会变慢。JWT 通常小于 4 KB。如更大,考虑是否在声明里塞了过多内容。

相关工具

最后更新:

看看 AI 提示词 →