如何解码 JWT 令牌(Header、Payload、Signature)
快速摘要
了解 JWT 的三段式结构、iat/nbf/exp 声明含义,以及解码与验证的关键区别。纯浏览器本地解码,不上传令牌。
JWT(JSON Web Token)是由 header.payload.signature 三部分以点号连接组成的字符串,常用于 Web 身份验证和信息交换。解码 JWT 只是把前两段从 Base64URL 还原成 JSON,不等于验证——任何人都能伪造包含任意声明的令牌。本文解释如何用 NeatForge JWT 解码器 安全地查看令牌内容。
什么是 JWT?
JWT 是一种紧凑的、URL 安全的令牌标准(RFC 7519),广泛用于 OAuth 2.0、OpenID Connect 和无状态会话。它把声明(claims)编码为 JSON,签名后由服务端签发,客户端在后续请求中携带。
一个典型 JWT 长这样:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMTIzIiwiaWF0IjoxNzAwMDAwMDAwLCJleHAiOjE3MDAwODY0MDB9.signature
JWT 的三部分是什么?
- Header:描述令牌类型和签名算法,如
{"alg":"HS256","typ":"JWT"}。 - Payload:包含声明(claims),如用户 ID、角色、过期时间。
- Signature:用密钥对前两段签名,用于验证完整性。
前两部分用 Base64URL 编码(关于 Base64 与 Base64URL 的区别,可参考 Base64 编码/解码指南)。Signature 是二进制签名,不是可读文本。
iat、nbf、exp 声明是什么意思?
这三个是标准时间声明,均以秒为单位的 Unix 时间戳存储:
iat(issued at):令牌签发时间。nbf(not before):令牌最早生效时间,早于此时间应被拒绝。exp(expiration):令牌过期时间,过期后服务端必须拒绝。
NeatForge 解码器会把这三个声明与当前时间比较,用颜色标记已过期(红)、尚未生效(黄)和有效(绿)的状态。
解码与验证的区别(重要)
这是 JWT 最常被误解的点:
- 解码(decode):把 Base64URL 还原成 JSON,任何人都能做,不需要密钥。
- 验证(verify):用密钥或公钥检查签名是否有效、
exp/nbf是否满足,必须由可信服务端执行。
仅解码后的令牌内容不能被信任。攻击者可以随意构造一个 {"role":"admin"} 的令牌。生产环境必须用库(如 jsonwebtoken、jose)在服务端验证签名后再使用声明。
如何安全地解码 JWT?
- 打开 JWT 解码器。
- 复制令牌粘贴到输入框。
- 查看 header 和 payload 的格式化 JSON。
- 检查
exp、nbf、iat的状态颜色。 - 用“复制”按钮取走 header 或 payload。
隐私说明
NeatForge JWT 解码完全在浏览器本地完成,令牌不上传、不记录、不存储。即便如此,仍建议:不要把生产环境的令牌粘贴到不可信网站;不要在截图或工单中分享 JWT——payload 里可能含有用户 ID、邮箱等敏感信息。对高度敏感的令牌,优先使用离线工具。
常见问题
解码 JWT 等于验证吗? 不等于。解码只是把 Base64URL 还原成 JSON,不需要密钥;验证要用密钥检查签名,必须在服务端进行。仅解码的内容不能被信任。
iat、nbf、exp 是什么?
iat 是签发时间,nbf 是最早生效时间,exp 是过期时间,三者均为 Unix 时间戳(秒)。
在网页里粘贴 JWT 安全吗? NeatForge 在浏览器本地解码,不上传令牌。但生产令牌含敏感声明,应避免粘贴到不可信网站。