未提供正确签发密钥时jwt.io仍显示JWT签名已验证的原因是什么?
原因说明
你遇到的情况是对jwt.io的校验逻辑和提示产生了误解,核心原因如下:
- 首先jwt.io对JWT的处理分为两个完全独立的步骤,对应的提示很容易被混淆:
- 格式合法性校验:只要输入的内容符合「三段Base64URL编码用点号分隔」的JWT标准结构,且Header、Payload可以正常解码为JSON,平台就会返回绿色的解码成功提示,这一步不需要签名密钥,和签名有效性没有任何关系。
- 签名有效性校验:只有这一步需要用到签发时的原始密钥,校验通过才会显示Signature Verified的提示。
- 如果你确认随便输入任意密钥、甚至不输入密钥都能触发Signature Verified提示,只有一种可能:你勾选了平台上的「Ignore Signature(忽略签名)」选项。开启该选项后平台会直接跳过签名校验逻辑,无论密钥是否正确,都会直接返回签名验证通过的结果。
另外还有一种少见的异常情况:如果页面脚本卡顿,你第一次输入正确密钥abcd触发校验通过后,后续修改密钥时脚本没有重新计算签名,也会一直保留验证通过的提示,刷新页面重新粘贴令牌即可恢复正常校验逻辑。
你提供的令牌解码结果如下:
Header
{ "alg": "HS256", "typ": "JWT" }
Payload
{ "email": "test@test.com", "name": "test", "iat": 1636182609 }
正常关闭忽略签名选项、不卡顿的情况下,输入非abcd的密钥时,平台会返回红色的Invalid Signature提示,你可以自行验证。
内容的提问来源于stack exchange,提问作者ArunJose
相关产品推荐
相关产品推荐

