JWT 解析与签名验证
加密与哈希
正在载入
正在加载工具
正在准备工具,暂时无法估算剩余时间。
本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。
关于这个工具
将三段式 JWT 展开为格式化的 Header 与 Payload JSON,或使用你信任的公钥显式验证签名。自行指定 RS256、PS256 或 ES256;本地 WebCrypto 验证会将签名结果与 exp、nbf、iat、签发者和受众检查分开显示。仅解析永远不能证明令牌真实可信。
常见用途
- 无需密钥即可查看测试令牌 JSON,复制 Header、Payload 或原始签名,保留原有解析流程。
- 使用可信的公钥 JWK 或 SPKI PEM、固定算法和虚构令牌排查签名不匹配。
- 设置参考时间与时钟容差,将过期或受众错误与密码学签名结果分开复现。
使用方法
- 1.只粘贴三段式令牌,去掉 Authorization: Bearer 前缀及包裹引号。解析后可查看和复制 JSON;解析不要求签名有效。
- 2.验证时,根据应用配置选择预期 RS256、PS256 或 ES256,不能只相信不可信 Header 中的 alg。粘贴一个可信公钥 JWK,或以 BEGIN PUBLIC KEY 开头的 SPKI PEM。
- 3.以 Unix 秒设置参考时间及允许的时钟容差。需要比较时填写预期签发者和受众;未设置预期值的检查会跳过,不能视为通过。 运行验证,分别查看签名及各项声明结果。修改设置、取消或清空会使旧结果失效;最终访问决策仍应由应用自身的可信验证器完成。
使用示例
查看虚构的 HS256 令牌
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTQyIiwiaWF0IjoxNzAwMDAwMDAwfQ.fskbbfT8Y-3vjXSxYDdc-fa23GdUmhivjVOFM9NWx8w
{
"sub": "user-42",
"iat": 1700000000
}这里展示 Payload 面板的结果。Header 为 {"alg":"HS256","typ":"JWT"};签名另行原样显示,未被验证。
读取 Unicode 声明
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoi5L2g5aW9IC8g5pel5pys6KqeIn0.6D1s9ZGSyIcSKLrHkt0c-TQ5z-EXQBbca1LyIGKjSD5nTsgjVxvxt9YDGLSLWJ_hp4GxYVemJchQ7XfXNV6xmQ
{
"name": "你好 / 日本語"
}Payload 保留 UTF-8 文本。不需要密钥即可读到 HS512 标签,但这仍然不代表签名通过验证。
常见错误与检查
- Bearer 前缀、多余的点或缺失片段会导致解析失败;请只输入三段式令牌。
- Header/Payload 中的标准 Base64 字符 +、/、填充 =、无效 UTF-8 或非对象 JSON 可能解析失败;JWT 使用无填充 Base64url。
- JSON 可读、exp 在未来或 alg 标注某个算法,都不能证明令牌可信或具备权限。
限制与说明
- 解析保留三段式 UTF-8 JSON 对象的原有流程,包括显示空签名或被修改的签名;验证模式会执行更严格的输入和密钥检查。不支持五段式加密 JWE、分离载荷或非对象 Header/Payload。
- 验证仅支持 2048–4096 位 RSA 公钥的 RS256、PS256,以及 P-256 EC 公钥的 ES256。PS256 使用 32 字节盐;所选算法必须与 alg 一致。拒绝 HMAC 共享密钥、私钥及 alg none;下方原有 HS256/HS512 示例仅用于解析。
- 仅接收单个公钥 JWK 或 SPKI BEGIN PUBLIC KEY PEM,不支持 JWK 集、证书及其他 PEM 类型。拒绝 jku、x5u、内嵌 jwk、x5c、crit、b64 Header;不获取远程密钥,也不让令牌自行决定信任的密钥。 验证仅允许 alg、typ、cty、kid Header 成员;kid 只是标签,不用于查找密钥。JWK 元数据必须符合所选算法及签名验证用途。重复 JSON 键、无效 Unicode 和非规范 Base64url 会被拒绝,不会静默正规化。
- 声明检查独立于签名。NumericDate 使用 Unix 秒,而非毫秒;缺失或跳过的检查不算通过。签名匹配不能证明不可信密钥的归属、用户身份、访问权限或撤销状态。
- 验证上限:令牌 64 KiB、公钥文本 16 KiB、JSON 深度 16、4096 个节点,一次性工作线程限时 5 秒。本地处理,不上传或存储输入。建议使用虚构令牌;真实 bearer token 及声明可能包含敏感信息。 编码片段另有限制:Header 4096 字符、Payload 60000 字符、签名 1024 字符。预期签发者及受众各限 2048 字符,时钟容差范围为 0–300 秒。NumericDate 必须是安全数值范围内的有限 JSON 数字,字符串和 null 均不通过。缺少时间声明会显示缺失;iat 仅提供信息,不构成新鲜度策略。
常见问题
解析成功是否代表签名有效?
不代表。解析仅展开 Header 和 Payload,并原样显示签名。必须主动选择验证、固定受支持的算法并提供可信公钥才能检查签名。即使签名匹配,也不能据此决定授权。 解析仍支持读取 HMAC 令牌的 JSON,包括下方原有示例。此验证器有意仅支持公钥及 RS256、PS256、ES256,不要求共享密钥或私钥,绝不会把公钥当作 HMAC 密钥使用。
签名有效的令牌也会过期吗?
会。具体示例:参考时间为 1700000100、容差为 0、exp 为 1700000100 时,恰好在这一秒已过期,但真实签名仍可匹配。若 nbf 为 1700000101,则在参考时间 1700000100 时尚未生效。这些时间检查不会改变被签名的字节。 NumericDate 使用 Unix 纪元以来的秒数。exp 表示过期时间,nbf 表示最早生效时间,iat 表示签发时间。签发时间检查可按参考时间与容差发现未来值,但不检查最大有效年龄、重放或撤销。
签发者、受众和跳过检查如何解读?
具体示例:iss 为 "https://issuer.example" 时,只匹配相同的预期签发者;aud 为 ["web","api"] 时匹配预期受众 "api",不匹配 "mobile"。预期签发者或受众留空会跳过相应比较,跳过不是通过。令牌自称的签发者不能证明其公钥可信。
格式与验证边界依据哪些标准?
JWS 签名输入见 RFC 7515(https://www.rfc-editor.org/rfc/rfc7515.html),公钥 JWK 见 RFC 7517(https://www.rfc-editor.org/rfc/rfc7517.html),算法选择与信任原则见 RFC 8725(https://www.rfc-editor.org/rfc/rfc8725.html),浏览器签名验证见 Web Cryptography API(https://www.w3.org/TR/webcrypto/)。下方 RFC 7518 与 RFC 7519 分别定义算法和声明。本工具实现明确限定的子集,并非完整 JOSE 实现。