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 各表示什么?
- exp:过期时间,达到该时间后不应接受 Token。
- iat:签发时间,不能仅凭它判断有效性。
- nbf:最早可接受时间,早于它时不应接受 Token。
这些 NumericDate 值以 Unix 秒为单位,不是 JavaScript 常用的毫秒;实际校验可能配置少量时钟偏差。
如何使用趁手验签?
工具提供 HS256 密钥和 RS256 PEM 公钥输入。只有使用可信来源的正确密钥,验签结果才有意义。HS256 使用共享密钥;RS256 使用公钥验证,不需要粘贴私钥。
验签通过就可以登录吗?
不可以。服务端还需要限制允许的算法,校验 issuer、audience、时间条件、撤销状态和权限。本工具用于排查,不能代替服务端认证。建议使用测试或脱敏 Token。
参考:RFC 7519、JWT 安全实践 RFC 8725。