⭐ 觉得好用?收藏备用,下次直接打开
JWT Token
🔒
公钥/密钥不会离开你的浏览器
所有验签计算均在本机 WebCrypto 内完成,密钥与 Token 不上传任何服务器、不写入存储。
请勿粘贴生产 HMAC Secret。本工具仅供调试和学习使用,因密钥外泄、误用、被盗导致的任何损失, 本网站不承担任何责任
期望算法
Secret 密钥

JWT 验签 用公钥(或对称 Secret)核验 JSON Web Token 的签名是否合法、声明是否还在有效期内。所有计算在浏览器原生 WebCrypto API 完成,密钥与 Token 不会上传任何服务器。

验证流程

  1. 粘贴 Token → 工具自动 base64url 解码 Header 与 Payload,并把 token 中的 alg 标记到对应算法 chip 上
  2. 选择期望算法(默认与 token 同步,可手动指定以防 alg confusion)
  3. 输入对应公钥 / Secret
  4. 点击”验证签名”

通过则得到绿色 ✅,失败给出具体原因(签名无效、算法不匹配、密钥格式错、alg=none 被拒等)。下方”声明检查”独立展示 exp / nbf / iat / iss / sub / aud 状态,过期或未生效会标红提示。

算法-密钥 对照

算法系列期望密钥输入示例
HS256/384/512HMAC 对称 Secret字符串
RS256/384/512RSA 公钥BEGIN PUBLIC KEY / BEGIN RSA PUBLIC KEY / 证书 / JWK
PS256/384/512RSA 公钥(PSS 用)同上
ES256/384/512EC 公钥(P-256/P-384/P-521)BEGIN PUBLIC KEY / 证书 / JWK

仅签名 + 时效

工具的”签名有效”结论严格限定在密码学层面——签名能用对应公钥还原、Token 内容未被篡改。不做以下校验,需要的请在自己后端补:

  • iss / aud / sub 与系统预期是否一致
  • jti 是否在重放黑名单中
  • scope / permissions 是否覆盖请求
  • 服务端撤销列表(被强制下线的 token)

时效检查(exp 必须大于当前时间、nbf 必须不晚于当前)与签名独立显示——签名有效但 token 已过期是真实存在的状态,不应误读为”完全无效”。

📍使用场景

  • 排查接口 401客户端拿到的 token 被后端拒绝时,本地用同一公钥/Secret 验一遍,定位是 token 篡改、过期、还是密钥不一致。
  • 校对签发实现实现完 JWT 签发后,自己签自己验跑通闭环;切算法迁移时双向核对。
  • 第三方 OIDC token 验证收到上游身份提供方的 ID Token,用其公布的公钥(JWKS / x5c)本地核签,确认未被中间人改写。
  • 安全审计 / CTF拿到一份 JWT 想搞清楚是哪种算法、签名是否真有效、是否落入 alg=none 等常见陷阱。

常见问题

为什么需要"期望算法",不能直接用 token 里的 alg 吗?

这是防 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 JSONkty=RSAkty=EC)。HS 算法直接输入 Secret 字符串。

验证通过 = token 完全可信吗?

不等于。本工具只校验"签名 + 时效声明",不做以下业务层校验:iss/aud/sub 是否符合预期、token 是否被服务端撤销、jti 是否重放、scope 是否覆盖、客户端是否绑定。完整可信判断需后端额外做这些。

alg=none 怎么处理?

永远视为无效。RFC 7515 允许 none 算法(无签名),但这是著名的"alg=none 攻击"入口——服务端如果误信会让任何人伪造 token。本工具不论传什么密钥,遇到 alg=none 一律拒绝。

ECDSA 验签提示"签名校验未通过",但用 OpenSSL 验是对的?

检查签名编码格式:JOSE 规范要求 ECDSA 签名是 r||s 拼接的固定长度(IEEE P1363),长度 = 2 × 曲线字节数(ES256=64 字节)。OpenSSL dgst -verify 默认期望 DER 编码,长度可变。如果你的 token 是用 OpenSSL 签的,签名段需要先从 DER 转 raw 才能放进 JWT。

能不能用 JWKS(多个 kid 公钥)批量验?

当前不支持 JWKS 自动选 key——你需要从 JWKS 中按 token header 的 kid 字段挑出对应那把 JWK,单独粘进密钥框。这是个常见进阶需求,未来可能补;眼下先用单 key 模式跑通主路径。