JWT 解码器
在浏览器中解码 JWT 的头部和载荷,检查 exp/nbf/iat 时间,并验证 HS256/384/512 或 RS256/384/512 签名。令牌不会离开您的设备。
输入内容和文件始终留在浏览器中
粘贴 JWT(header.payload.signature),或加载演示令牌。
- 头部
- 载荷
- 签名
验证签名
粘贴令牌后,头部、载荷和时间声明将显示在这里。
时间检查不能证明真实性。
本页内容
粘贴 JSON Web Token,即可看到格式化 JSON 形式的头部和载荷、签名算法,以及令牌的签发、生效和过期时间。还可以用共享密钥或 RSA 公钥验证签名。
详细功能
解码随输入实时进行:头部和载荷经过 base64url 解码,并按令牌中原有的声明顺序格式化显示。从 HTTP 头复制来的开头 Bearer 和换行会被自动去除。注册的时间声明 exp、nbf 和 iat 以本地时区的日期显示,已过期或尚未生效的令牌会被标出。
签名验证在编译为 WebAssembly 的 Rust 加密模块中运行,并使用令牌头部声明的算法:HS256、HS384 和 HS512 使用共享密钥(按 UTF-8 文本处理),RS256、RS384 和 RS512 使用 PEM 格式的 RSA 公钥(BEGIN PUBLIC KEY 或 BEGIN RSA PUBLIC KEY)。也可以粘贴 JWK 或 JWKS(例如身份提供方的 /.well-known/jwks.json):按令牌的 kid 选择密钥(没有 kid 时尝试所有与算法匹配的密钥),并用浏览器的 Web Crypto API 验证——这样还支持 PS256/384/512、ES256/384/512 和 EdDSA (Ed25519)。alg: none 的令牌始终报告为未签名,绝不会显示为有效。
令牌和密钥都留在页面中:不会发送到服务器,也不会保存。请记住,解码本身不能证明真实性——只有通过验证的签名才能。
实用示例
jwt.io 示例:令牌 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIi… 解码出头部 {"alg":"HS256","typ":"JWT"} 和包含 sub、name、iat 的载荷;使用密钥 your-256-bit-secret 显示 “签名已验证”,其他任何密钥显示 “无效签名”。
已过期的令牌:载荷中含 "exp": 1767225600 时,会标记为已于 2026 年 1 月 1 日过期(以本地时区显示)。
来自 Authorization 头:直接粘贴 Bearer eyJ… 即可——解码前会去掉前缀和换行。
未签名的令牌:eyJhbGciOiJub25lIn0.eyJzdWIiOiIxIn0. 解码为 {"alg":"none"} 和 {"sub":"1"},并被报告为未签名、不可信任。
如何使用此工具
粘贴令牌
将 JWT 粘贴到 编码的 JWT,解码立即开始。
查看头部和载荷
查看格式化后的 头部 和 载荷、算法标记,以及载荷下方的签发、生效和过期时间。
验证签名
在 验证签名 中,把 HMAC 密钥或 PEM 公钥填入 密钥 / RSA 公钥。状态会显示签名是否有效。
提示和最佳实践
- 任何人都能解码 JWT:切勿在载荷中放入密码或其他机密。
- HMAC 密钥按输入原样使用。如果后端以 base64 编码存储密钥,请先解码——直接粘贴 base64 字符串会显示 “无效签名”。
- 对于 RS* 令牌请粘贴公钥而不是私钥;不接受 X.509 证书,请先从中提取公钥。
- 过期时间与设备时钟比较,系统时间不正确会导致错误的“已过期”标记。
- 需要测试用的令牌?可以在 JWT 编码器中创建。