JWT 解析与验签:读懂 exp、iat、nbf,区分解码与验证

趁手 · 更新于

常见的三段式签名 JWT(JWS)可以解码查看 Header 和 Payload。解码成功只说明内容可读,不代表签名可信,也不代表当前账号有访问权限。

三段式 JWT 是什么?

Header.Payload.Signature

前两段是 Base64URL 编码内容,第三段是签名。本文和工具讨论的是这种签名形式;加密 JWT(JWE)采用另一种结构,不能按同样方式解码。

可复制的解码示例

eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjAsImlhdCI6MCwibmJmIjowfQ.AA

这个示例故意使用无效签名,仅用于观察解码;不应通过验签。Payload 内容是:

{"exp":0,"iat":0,"nbf":0}

exp、iat、nbf 各表示什么?

这些 NumericDate 值以 Unix 秒为单位,不是 JavaScript 常用的毫秒;实际校验可能配置少量时钟偏差。

如何使用趁手验签?

工具提供 HS256 密钥和 RS256 PEM 公钥输入。只有使用可信来源的正确密钥,验签结果才有意义。HS256 使用共享密钥;RS256 使用公钥验证,不需要粘贴私钥。

验签通过就可以登录吗?

不可以。服务端还需要限制允许的算法,校验 issuer、audience、时间条件、撤销状态和权限。本工具用于排查,不能代替服务端认证。建议使用测试或脱敏 Token。

参考:RFC 7519、JWT 安全实践 RFC 8725。

打开对应工具

继续阅读