JWT 验签 用公钥(或对称 Secret)核验 JSON Web Token 的签名是否合法、声明是否还在有效期内。所有计算在浏览器原生 WebCrypto API 完成,密钥与 Token 不会上传任何服务器。
alg 标记到对应算法 chip 上通过则得到绿色 ✅,失败给出具体原因(签名无效、算法不匹配、密钥格式错、alg=none 被拒等)。下方”声明检查”独立展示 exp / nbf / iat / iss / sub / aud 状态,过期或未生效会标红提示。
| 算法系列 | 期望密钥 | 输入示例 |
|---|---|---|
| HS256/384/512 | HMAC 对称 Secret | 字符串 |
| RS256/384/512 | RSA 公钥 | BEGIN PUBLIC KEY / BEGIN RSA PUBLIC KEY / 证书 / JWK |
| PS256/384/512 | RSA 公钥(PSS 用) | 同上 |
| ES256/384/512 | EC 公钥(P-256/P-384/P-521) | BEGIN PUBLIC KEY / 证书 / JWK |
工具的”签名有效”结论严格限定在密码学层面——签名能用对应公钥还原、Token 内容未被篡改。不做以下校验,需要的请在自己后端补:
时效检查(exp 必须大于当前时间、nbf 必须不晚于当前)与签名独立显示——签名有效但 token 已过期是真实存在的状态,不应误读为”完全无效”。
这是防 alg confusion 攻击的关键。如果工具直接信任 token.alg,攻击者可以把 RS256 改成 HS256,然后用泄露的"公钥字符串"当 HMAC secret 来伪造签名,验证就会通过。本工具强制让你显式指定期望算法,与 token 不一致直接拒绝。
PEM BEGIN PUBLIC KEY(SPKI 通用,最常用)、PEM BEGIN RSA PUBLIC KEY(PKCS#1 RSA,自动包装为 SPKI)、X.509 证书(自动从证书提取 SubjectPublicKeyInfo)、JWK JSON(kty=RSA 或 kty=EC)。HS 算法直接输入 Secret 字符串。
不等于。本工具只校验"签名 + 时效声明",不做以下业务层校验:iss/aud/sub 是否符合预期、token 是否被服务端撤销、jti 是否重放、scope 是否覆盖、客户端是否绑定。完整可信判断需后端额外做这些。
alg=none 怎么处理?永远视为无效。RFC 7515 允许 none 算法(无签名),但这是著名的"alg=none 攻击"入口——服务端如果误信会让任何人伪造 token。本工具不论传什么密钥,遇到 alg=none 一律拒绝。
检查签名编码格式:JOSE 规范要求 ECDSA 签名是 r||s 拼接的固定长度(IEEE P1363),长度 = 2 × 曲线字节数(ES256=64 字节)。OpenSSL dgst -verify 默认期望 DER 编码,长度可变。如果你的 token 是用 OpenSSL 签的,签名段需要先从 DER 转 raw 才能放进 JWT。
当前不支持 JWKS 自动选 key——你需要从 JWKS 中按 token header 的 kid 字段挑出对应那把 JWK,单独粘进密钥框。这是个常见进阶需求,未来可能补;眼下先用单 key 模式跑通主路径。