Appearance
auth-token-simulation
1. 实验目标
用纯 Java CLI 仿真 Token 鉴权核心机制(对应 docs/06-backend-data/06):
- JWT 三段式结构:Header / Payload 只是 Base64(防篡改不防读取)
- 双 Token:access_token 短命 + refresh_token 长命
- 并发 401 排队:多个请求同时 401 只刷新一次,其余复用新 token 重放
2. 工程要点
- 手写
Base64.getUrlEncoder()构造真实 JWT,运行时可解码看 Payload 明文 - 并发 401 模拟:
synchronized+ Double-Check,10 并发只触发 1 次刷新 - 无外部依赖,
javac+java直接跑
3. 运行方式
bash
cd labs/java/backend-data/auth-token-simulation
javac -d out src/AuthTokenSimulation.java
java -cp out AuthTokenSimulation4. 预期现象
- 输出的 JWT 可解码:Header
{"alg":"HS256",...}、Payload{"sub":"user_10086","name":"alex",...} - 10 个并发 401 →
实际触发刷新次数 = 1
5. 常见误区
| 误区 | 实际情况 |
|---|---|
| JWT 是加密的 | 只有签名段是密文;Header/Payload 是明文 Base64,任何人可解码 |
| Payload 可放敏感信息 | 放手机号/密码 = 泄露;只放 sub/role/exp 等非敏感标识 |
| 并发 401 各自刷新 | 会造成刷新风暴;必须串行化(Authenticator / 锁),只刷新一次 |