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)获取的公钥即可,无需担心泄露问题。

常见问题

仅支持RS256和ES256的验证。HS256、HS384、HS512属于共享密钥方式,需要发签名方和验证方共用同一密钥,因此无法用只输入公钥的本工具验证。若需确认HS256签名,可使用姊妹工具JWT编码器用相同密钥重新签名并比对结果。

身份提供商(Google、Auth0、Okta等)通常通过名为JWKS(JSON Web Key Set)的公开端点发布公钥。可以使用JWKS转PEM的转换工具,或直接使用对应服务文档中提供的公钥。

常见原因包括:①所输入的公钥与签发该JWT的私钥不成对;②JWT的Header、Payload或Signature在传输过程中被篡改或损坏;③复制粘贴时丢失了字符。建议从来源重新准确复制JWT字符串和公钥。

目前仅支持RS256和ES256。RS384/RS512、ES384/ES512等使用更长哈希函数的变体,属于后续考虑扩展支持的候选方向。

是的,签名的有效性与exp是否过期是分别判断并各自显示的。即使签名正确,过期的令牌在实际系统中通常也应被拒绝,请务必同时留意页面上显示的有效期警告。
ツールくん

闲话 ― 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中采用日益增多。

→ 查看全部趣味知识