JWT实用文档:身份验证神器详解
JWT实用文档:身份验证神器详解
一、JWT概述
JSON 网页令牌(JWT)是一种标准化的安全令牌格式,专为在两方之间安全传输数据而设计。其核心优势在于支持无状态身份验证,即服务器无需存储会话信息,显著简化系统架构,广泛应用于分布式系统、前后端分离架构的身份验证场景。
二、JWT核心组成
JWT 采用"头部.有效载荷.签名"的三段式结构(例:header.payload.signature),各部分功能如下:
|
组成部分 |
核心作用 |
关键内容示例 |
|
头部(Header) |
描述令牌元数据 |
- 令牌类型(固定为JWT) |
|
有效载荷(Payload) |
存储实体声明信息 |
- 注册声明(标准字段,如exp过期时间、iss签发者) |
|
签名(Signature) |
确保令牌完整性与真实性 |
由Base64Url编码的头部+Base64Url编码的有效载荷+密钥通过指定算法生成 |
三、签名的核心价值
签名是JWT的安全基石,其作用包含:
- 防篡改验证:通过对比接收令牌的签名与服务器重新计算的签名,确认令牌内容未被非法修改。
- 来源可信验证:仅持有相同密钥的可信签发方(如服务端)能生成有效签名,防止伪造令牌。
四、JWT使用全流程
1. 令牌生成(用户登录阶段)
用户通过账号密码/第三方登录完成身份验证后,服务端:
- 收集用户身份信息(如user_id、role);
- 结合过期时间(如exp: 7200表示2小时后过期)等声明;
- 使用预设密钥和指定算法(如HS256)生成签名;
- 最终返回header.payload.signature格式的JWT给客户端。
2. 令牌使用(资源请求阶段)
客户端后续请求受保护资源时,需在请求头中携带JWT(通常格式为Authorization: Bearer <JWT>)。
3. 令牌验证(服务端处理阶段)
服务端收到请求后,执行两步验证:
- 签名验证:重新计算头部+有效载荷的签名,与接收令牌的签名比对,确认未篡改;
- 声明校验:检查有效载荷中的关键声明(如exp是否过期、iss是否为当前服务)。
验证通过后,服务端解析有效载荷获取用户信息,完成授权并返回资源。
五、注意事项
- 密钥安全:签名密钥需严格保密(尤其是对称加密算法HS256),泄露将导致令牌可伪造;
- 令牌长度:避免在有效载荷中存储过多数据(如完整用户信息),过长的JWT会增加网络传输开销;
- 过期时间:建议设置合理的exp(如15-30分钟),结合刷新令牌(Refresh Token)机制平衡安全性与用户体验;
- 敏感信息:有效载荷为Base64Url编码(可轻松解码),禁止存储密码、支付信息等敏感数据。
通过JWT,开发者可快速实现安全、高效的无状态身份验证,为应用程序构建可靠的安全边界。
浙公网安备 33010602011771号