中学生也能懂的网络实验:汉化版Packet Tracer快速理解
2026/1/9 22:55:27
JWT(JSON Web Token)鉴权是一种无状态、自包含的认证机制,其核心在于“信任签名,而非存储”。
xxxxx.yyyyy.zzzzz ↑ ↑ ↑ Header.Payload.Signature{"alg":"HS256","typ":"JWT"}alg)和令牌类型(typ)。eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9{"sub":"1234567890",// 主题(用户ID)"name":"John Doe","admin":true,"iat":1516239022,// 签发时间"exp":1516242622// 过期时间(关键!)}iss(签发者)、sub(主题)、aud(受众)exp(过期时间)、nbf(生效时间)、iat(签发时间)eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ⚠️Payload 未加密!任何人可解码查看内容(仅防篡改,不防窥探)。
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret_key )✅关键:只有服务端持有
secret_key,能生成/验证签名。
.分割三段。secret_key重新计算签名,比对是否一致。exp是否过期iss是否可信aud是否匹配当前服务sub或自定义字段获取用户 ID。✅无状态:服务端无需存储 JWT,所有信息自包含。
| 算法类型 | 示例 | 密钥管理 | 适用场景 |
|---|---|---|---|
| 对称加密 | HS256, HS512 | 单一secret_key(服务端保管) | 单体应用、内部服务 |
| 非对称加密 | RS256, ES256 | 私钥(签发)+ 公钥(验证) | 多服务、OAuth 2.0 |
secret_key。⚠️绝对禁止:
- 使用
none算法(无签名)- 客户端可控制
alg字段(导致算法混淆攻击)
exp前始终有效。jti+exp),验证时检查。token_version,Payload 中带版本,不匹配则拒绝。jti(JWT ID) + 服务端记录已用 ID(短期存储)。| 特性 | JWT | Session |
|---|---|---|
| 状态 | 无状态(服务端不存) | 有状态(服务端存 Session) |
| 扩展性 | 天然适合分布式 | 需共享 Session 存储(Redis) |
| 安全性 | 依赖签名 + 短期有效 | 依赖 Cookie 安全(HttpOnly, Secure) |
| 撤销 | 困难(需额外机制) | 简单(删除 Session) |
| 体积 | 较大(含 Payload) | 小(仅 Session ID) |
✅选型建议:
- API 服务、移动端→ JWT
- 传统 Web 应用→ Session(更易管理登出、CSRF)
exp,iss,aud必须校验。secret_key≥ 32 字节随机字符串💡一句话本质:
JWT 是“一次性密码本”,签名保证真实性,有效期控制风险窗口。