JSON Web Token 解码与验签
三段 base64url、一个要么真要么假的签名,以及一个要么包含此刻要么不包含的有效期。这个工具在离线状态下回答这三件事,答案是否定时会给出确切原因。
密钥只在本标签页中由浏览器的加密模块使用,不会被发送到任何地方。
工作方式
粘贴令牌
粘贴,或拖入一个文件 —— 哪怕是一行日志:令牌会被从中提取出来,随即被切分、解码并检查格式问题。
填入密钥
文本、base64 或十六进制的共享密钥,PEM 公钥,JWK,或者整份 JWKS —— 与令牌 kid 匹配的条目会自动选中。
验证
点一下按钮:由浏览器自带的加密来算。你会得到有效、无效,或者密钥用不了的确切原因 —— 而不是一句含糊其辞。
继续深入
按你的服务期望校验声明,在构建器里签发一个新令牌,或者把载荷交给套件里的另一个工具。
签名是真的在校验
HS256/384/512、RS、PS 和 ES(含 P-521 上的 ES512),由浏览器自带的 Web Crypto 完成校验。没有服务器,没有第三方库,不上传。
声明不只展示,还会判定
按你设定的时钟偏差检查 exp、nbf、iat,再加上你的服务期望的签发者、受众和主体。每一项都会明确给出通过、失败或跳过。
看得见的有效期
只有真的存在期限时倒计时才会走,进度条会显示此刻位于 nbf 与 exp 之间的什么位置。
不只读令牌,还能签发
编辑头部和载荷,选择算法,然后签名。结果会直接回到解析视图,让你亲自验证刚做出来的东西。
各种密钥格式
文本、base64 或十六进制的密钥;PEM 公钥;单个 JWK;或整份 JWKS —— 与 kid 匹配的条目会自动选中。
把攻击直接点名
alg: none、空签名、是合法 JSON 却不是对象的载荷、从 URL 里带出来的 base64 —— 每一种都会被如实指出。
不上传任何内容
令牌和密钥只在本标签页的加密模块里使用,关掉就没了。根本不存在可以接收它们的服务端。
交接给套件里的其他工具
把声明直接送到 JSONFlow、DiffSnap、Base64Bolt 或 Hash Bolt,无需下载再上传。
一个也会说「不」的解码器
粘贴令牌就能读懂它,加上密钥就能证明它。用浏览器自带的加密做真实签名校验,按你的服务期望校验声明,还有一个能重新签发令牌的构建器。
浏览器本来就带着加密能力
Web Crypto 是 HMAC、RSASSA-PKCS1-v1_5、RSA-PSS 和 ECDSA 的完整实现,每个浏览器都免费自带。解码、验签、声明校验和签发全都走它,就在这个标签页里,不发出任何请求。
为真正的排查而做,不是为演示
下午三点会冒出来的问题:这个 401 是令牌过期,还是网关上的密钥不对?客户端发的 aud 是 API 期望的那个吗?那个 kid 还在 JWKS 里吗?粘贴令牌、粘贴密钥集,就能得到带理由的答案 —— 包括那些不只是无效、而是根本坏掉的令牌。
JWT 通常携带一个身份,而签名密钥则是铸造它们的东西。这两样在这里都不会被发送到任何地方:本工具没有服务端、没有账号、不对你粘贴的内容做分析。关掉标签页两者就都没了,因为这个标签页的内存是它们唯一存在过的地方。
常见问题
Q我的令牌或密钥会被上传吗?+
不会。解码、签名校验和签发都通过 Web Crypto API 在你的浏览器里完成。根本不存在可以接收它们的服务端,两次访问之间也不保存任何东西。
Q它真的能校验签名吗?+
能,这正是这一版的重点。HS256/384/512 粘贴共享密钥;RS、PS、ES 粘贴 PEM 公钥、JWK 或 JWKS。计算由浏览器完成,结论是有效、无效,或者密钥用不了的具体原因。
Q支持哪些算法?+
HS256、HS384、HS512、RS256、RS384、RS512、PS256、PS384、PS512、ES256、ES384 和 ES512;浏览器提供 Ed25519 时还支持 EdDSA。ES512 按规范使用 P-521。
Qalg: none 会怎样?+
它会被标记为未加签令牌,校验永远拒绝它。没有签名的令牌正是这项检查存在的理由,所以它绝不会得到绿色对勾。
Q我能创建令牌,而不只是读取吗?+
可以。构建标签页允许你编辑头部和载荷、选择算法、当场生成密钥或 RSA/EC 密钥对,然后签名。结果会直接回到解析视图,让你验证自己刚做出来的东西。
Q声明校验做了什么?+
它们把令牌与一个验签方会提出的要求作比较:按你设定的时钟偏差检查 exp、nbf、iat,可选的最大存活时间,以及你的服务期望的签发者、受众和主体。每一行会通过、失败,或者在你没有要求时被跳过。