JWT解析
JSON Web Token解析与验证
注册 Claims(RFC 7519 标准定义)
| 字段 | 全称 | 类型 | 说明 |
|---|---|---|---|
| iss | Issuer | String | 签发该JWT的主体 |
| sub | Subject | String | JWT的主体(通常是用户ID) |
| aud | Audience | String/Array | 该JWT的预期接收者 |
| exp | Expiration Time | NumericDate | 过期时间(Unix时间戳,秒) |
| nbf | Not Before | NumericDate | JWT在此时间之前不可用 |
| iat | Issued At | NumericDate | JWT的签发时间 |
| jti | JWT ID | String | JWT的唯一标识符,防止重放攻击 |
公开 Claims(IANA 维护)
| 字段 | 全称 | 说明 |
|---|---|---|
| name | Full Name | 用户全名 |
| 邮箱地址 | ||
| email_verified | Email Verified | 邮箱是否已验证 |
| phone_number | Phone Number | 电话号码 |
| address | Address | 地址对象(含street/city/...) |
| locale | Locale | 语言区域代码 |
| updated_at | Updated At | 信息最后更新时间 |
私有 Claims(自定义声明)
| 字段 | 说明 |
|---|---|
| role | 用户角色,如 admin / editor / viewer |
| permission | 权限标识,如 read / write / delete |
| org_id | 组织/租户ID,多租户系统中常用 |
| scopes | 权限范围列表 |
JWT 是什么
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。它是一个紧凑的、URL安全的字符串,由三段 Base64Url 编码的文本通过 . 连接组成。
三段式结构
Header.Payload.Signature
- Header:包含签名算法(
alg)和Token类型(typ) - Payload:包含实际传输的数据(Claims),如用户信息、权限、过期时间等
- Signature:对 Header + Payload 的签名,用于验证数据未被篡改
工作流程
- 1. 签发:服务端使用密钥对 Header.Payload 进行签名,生成完整 JWT
- 2. 存储:客户端收到 JWT 后存储在 localStorage / Cookie / 内存中
- 3. 携带:客户端在后续请求的
Authorization: Bearer <token>头中携带 - 4. 验证:服务端验证签名有效性和 exp 等时间字段
安全注意事项
- 不存储敏感信息:Payload 只是 Base64 编码,任何人都能解码
- 使用 HTTPS:防止 Token 在传输中被截获
- 选择安全的算法:推荐 HS256 / RS256,避免使用
none算法 - 设置合理的有效期:Access Token 建议 15-30 分钟
- Token 撤销:JWT 本身无法撤销,需要配合黑名单或短有效期策略