一、登录认证中台
这是你最有含金量的项目。
1️⃣ 为什么 Token 只设计 5 分钟有效期?
参考答案:
我们当时是从安全性出发考虑的。
Access Token 本质上是无状态的,一旦泄漏,在有效期内是无法主动吊销的。所以我们把有效期压到 5 分钟,降低风险窗口。
但单纯缩短会影响体验,所以我们配套做了自动刷新机制。用户是无感知的,前端会在快过期时触发刷新。
简单说就是:
短周期提升安全
自动刷新保证体验
这是一个安全和用户体验之间的平衡设计。
2️⃣ 你说用 Map 做刷新锁,怎么解决并发 401 问题?
参考答案:
这个是我们当时踩过坑的地方。
如果 10 个请求同时 401,理论上会触发 10 次 refresh,这会造成:
重复刷新
Token 状态混乱
后返回的旧 Token 覆盖新 Token
我们做了一个 refreshLock 机制。
核心思路是:
如果检测到正在刷新,就把后续请求挂起,等第一个刷新完成后统一放行。
实现上是:
用 Map 存当前 refresh Promise
后续 401 请求直接 return 这个 Promis