JWT解析
Header(头部)
Payload(载荷)
JWT 令牌解析使用指南
一、什么是 JWT?
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以 JSON 对象安全地传输信息。JWT 是目前最流行的跨域认证解决方案,广泛应用于单点登录(SSO)、API 认证和信息交换等场景。与传统的 Session 认证不同,JWT 是无状态的,服务端不需要存储会话信息,这使得它特别适合分布式系统和微服务架构。
二、JWT 的结构
JWT 由三部分组成,用 . 分隔:
- Header(头部):包含令牌类型和签名算法
- Payload(载荷):包含声明(claims),即实际传输的数据
- Signature(签名):用于验证消息在传输过程中未被篡改
三、Header 头部详解
Header 通常包含两个字段:
- typ(type):令牌类型,固定为
JWT - alg(algorithm):签名算法,常见的有 HS256(HMAC SHA-256)、RS256(RSA SHA-256)、ES256(ECDSA SHA-256)等
四、Payload 载荷详解
Payload 包含声明(Claims),分为三种类型:
- iss(Issuer):签发者,标识令牌的发行方
- sub(Subject):主题,标识令牌的主体(通常是用户ID)
- aud(Audience):接收者,标识令牌的预期接收方
- exp(Expiration Time):过期时间,超过此时间令牌无效
- nbf(Not Before):生效时间,在此之前令牌无效
- iat(Issued At):签发时间
- jti(JWT ID):唯一标识符,用于防止重放攻击
除了标准声明外,还可以添加自定义声明,如用户角色、权限等业务数据。
五、JWT 的安全注意事项
- 不要在 Payload 中存储敏感信息:Payload 只是 Base64 编码,任何人都可以解码查看
- 设置合理的过期时间:避免令牌长期有效,建议 Access Token 有效期 15-30 分钟
- 使用 HTTPS 传输:防止令牌在网络传输中被窃取
- 选择安全的签名算法:推荐使用 RS256 而非 HS256,避免算法混淆攻击
- 验证所有声明:服务端必须验证 exp、iss、aud 等声明,不能只验证签名
六、常见问题
1. JWT 和 Session 有什么区别?
Session 是有状态的,服务端需要存储会话数据;JWT 是无状态的,所有信息都包含在令牌中。JWT 更适合分布式系统和移动端,但无法主动使令牌失效。
2. 如何实现 JWT 的主动失效?
常见方案包括:使用黑名单(Redis 存储)、缩短 Access Token 有效期配合 Refresh Token、在 Payload 中加入版本号等。
3. 本工具安全吗?
本工具完全在浏览器本地解析 JWT,不会将令牌发送到任何服务器。但请注意,不要在公共设备上解析包含敏感信息的令牌。