Skip to content
安全2026-08-284 分钟阅读

现象:解码 JWT 后提示"签名无效"

你把一个 JWT(JSON Web Token)粘进解码工具,想看看里面 payload 的内容,结果工具提示:

signature invalid

或者干脆标红"验签失败"。你开始怀疑:是不是这个 token 坏了?是不是我复制错了?

先给结论:token 大概率没坏。这个提示说的是"验签失败",而不是"解码失败"。

先分清两个动作:解码 vs 验签

这是理解一切的钥匙:

| 动作 | 需要密钥吗 | 做什么 | 会失败吗 | |---|---|---|---| | 解码(decode) | ❌ 不需要 | 把 header.payload.signature 三段做 Base64URL 还原,得到明文 JSON | 几乎不会(除非格式损坏) | | 验签(verify) | ✅ 需要 | 用密钥重新计算签名,和原签名比对,确认 token 没被篡改 | 会因密钥/算法不匹配而失败 |

解码只是"拆开信封看内容",谁都能做;验签是"核对封口蜡印",必须持有正确的密钥。

为什么会出现 signature invalid

工具在解码的同时尝试验签,结果失败了。常见原因有四类:

  1. 只粘贴了部分 token —— 漏了最后一段,或前后多了空格/换行;
  2. 算法不匹配 —— header 里声明 HS256,但你提供的密钥对应的是 RS256(非对称),反之亦然;
  3. 密钥错误 —— 验签用的密钥和签发方用的不是同一把;
  4. token 被篡改 —— payload 被人改过,签名自然对不上。

本质上:signature invalid安全机制在正常工作的信号,它在告诉你"我无法确认这段 token 的完整性",而不是"token 无法读取"。

验签失败的排查清单

按命中概率排序,逐条对号:

| 症状 | 原因 | 快速确认法 | |---|---|---| | 复制不完整 | 少了最后一段签名 / 首尾混入空格换行 | 数一下 token 是否恰好两个 . 三段 | | 密钥不对 | 测试环境密钥贴进了生产 token | 和签发服务的配置核对密钥值 | | 算法不匹配 | HS256/RS256 混着用 | 看 header 里的 alg,确认你提供的密钥类型一致 | | Token 被改过 | payload 被手工编辑过 | 让工具同时高亮"解码成功但验签失败"——这就是被改的信号 | | 时钟偏移 | 本机时间与签发服务器差太多 | iat/exp 和当前时间对比,偏差超过几分钟就要校时 |

其中"时钟偏移"最隐蔽:签名本身没错,但校验方按 nbf(生效时间)判断 token 还没生效、或按 exp 判断已过期,表象和"验签失败"几乎一样。分布式系统里两台机器差 30 秒就足以触发,解决要么 NTP 校时,要么校验逻辑里允许少量 clockTolerance

RS256 场景:公钥从哪来

HS256 只要拿到对称密钥就能验;RS256 验签需要公钥,它的正规来源是签发方的 JWKS 端点(通常形如 https://auth.example.com/.well-known/jwks.json),里面是 JWK 格式的公钥参数(n、e)。调试 RS256 token 时常见的失败原因就是拿错了钥匙:拿成了私钥文件、拿错了 kid 对应的公钥(签发方轮换密钥后 JWKS 里有多把)。header 里的 kid 字段就是用来选对的。

怎么用工具"只看内容、不验签"

如果你只是想调试、查看 payload 里发了什么字段(比如排查 exp 过期、sub 用户 ID),并不需要验签。打开 ToolVault 工具匣 的 JWT 解码工具

  1. 把完整 token 粘进输入框;
  2. 工具会拆出 header 和 payload 的明文 JSON,直接可读;
  3. 它也会显示验签状态,但即使验签失败,内容依然可见——这正是调试时你需要的;
  4. 全程本地解析,token 不上传。

想快速读 payload 的原始字节,把前两段丢进 Base64 解码 也行;要自己造一个测试 token,用 JWT 生成器

什么时候才需要真正的"验签"

只有以下场景你才必须拿正确的密钥去验签:

  • 后端接收请求时确认 token 确实由可信方签发、未被篡改;
  • 判断 token 是否过期 / 生效,依赖 expnbf 等声明;
  • 安全审计中验证 token 来源。

前端"只看内容"属于调试,绝不能用"解码成功"代替"验签通过"来做权限判断——那会被伪造 token 绕过。最经典的攻击就是:改 payload 里的 roleadmin、把 alg 改成 none 并删掉签名段,凡是"解码成功就放行"的系统直接沦陷。

FAQ

验签失败的 token 还能用吗?

调试查看可以;但任何依赖该 token 做身份认证的环节都必须先验签通过。验签失败的 token 在业务上应一律拒绝。

为什么有些工具不提示 invalid,有些提示?

是否尝试验签取决于工具设计。只做"解码"的工具不会提示;同时做"解码+验签"的工具在缺少/不匹配密钥时会提示 invalid。两者看到的内容是一样的。

HS256 和 RS256 的密钥能混用吗?

不能。HS256 用同一把对称密钥签名和验签;RS256 用私钥签名、公钥验签。混用必然验签失败。


本文由 ToolVault 工具匣 提供。相关工具:Base64 编解码SHA256 哈希密码生成器。访问 首页 查看更多开发者工具。


广告