JWT签名验证工具(RS256/ES256,公钥验证)
一款开发者工具,可使用SPKI格式的公钥(PEM)在浏览器中即时验证以RS256或ES256签名的JWT(JSON Web Token)。同时显示解码后的Header/Payload以及过期时间检查结果。所有输入内容仅在浏览器内处理,不会发送到服务器。
支持的签名算法一览
| 算法 | 密钥类型 | 哈希函数 | 说明 |
|---|---|---|---|
| RS256 | RSA(RSASSA-PKCS1-v1_5) | SHA-256 | 基于RSA公钥密码体制的签名方式,是Google、Auth0、Okta等主流OAuth 2.0/OpenID Connect提供商为ID令牌采用的标准默认算法。 |
| ES256 | ECDSA(P-256椭圆曲线) | SHA-256 | 基于椭圆曲线密码学的签名方式,可用比RSA更短的密钥长度和签名长度实现同等安全性,越来越多地应用于移动应用和物联网设备。 |
使用提示
- 输入的公钥必须是PEM格式(SPKI,以「-----BEGIN PUBLIC KEY-----」开头)。直接粘贴私钥文件或证书(.crt)无法完成验证。
- 系统会根据JWT Header中
alg字段的值(RS256或ES256)自动切换所使用的验证算法,无需手动选择。 - 验证签名的同时也会检查Payload中的
exp声明,若已过期会显示警告。即使签名正确,过期的令牌通常也应被拒绝。 - 本工具仅支持RS256和ES256。若需确认HS256等共享密钥方式签名的JWT,可使用姊妹工具JWT编码器用相同的共享密钥重新签名并比对结果。
- 用于验证的公钥并非机密信息,直接粘贴从身份提供商公开端点(如JWKS)获取的公钥即可,无需担心泄露问题。
常见问题
闲话 ― HMAC与公钥签名,区别在哪里
JWT的签名方式大致分为共享密钥方式(HMAC,如HS256)和公钥方式(RSA/ECDSA,如RS256、ES256)两大类。共享密钥方式要求签名方与验证方持有相同的秘密字符串,而公钥方式中只有签名方持有私钥,任何人都可以用公开的公钥进行验证。这一差异直接决定了API设计中的角色分工:姊妹工具JWT编码器(HS256)适合「签发者与验证者同处一台服务器」的场景,而本工具所处理的RS256、ES256则更适合「签发者与验证者分属不同组织或不同服务器」的场景。
实际上,Google的OAuth 2.0、OpenID Connect、Auth0、Okta等主流身份提供商签发的ID令牌几乎无一例外地采用RS256签名(部分也可选择ES256)。这是因为只有身份提供商一方持有私钥进行签名,而数量庞大的客户端应用(验证方)只需使用公钥即可完成验证,无需向每个客户端分发密钥,从而将密钥泄露的风险集中在签名方这一个点上。
RS256与ES256都使用SHA-256进行哈希计算,但底层的密码算法不同。RS256采用RSA密码体制(通常为2048位或更长的密钥),签名长度往往较大,但胜在实现成熟、支持的库众多。ES256采用椭圆曲线密码学(P-256),能以远比RSA更短的密钥和签名长度实现同等的安全强度,因此在移动端和对负载大小敏感的API中采用日益增多。