当项目从一个应用变成五六个应用时,登录就成了一件必须统一的事情。这篇笔记记录我们的 OAuth 2.0 授权码方案。
整体结构
- 认证中心:负责登录页、令牌签发、用户信息
- 业务应用:注册为 OAuth 客户端,拿到 clientId / clientSecret
- API 服务:校验令牌,返回受保护资源
授权码流程
- 应用跳转到认证中心,携带 clientId 与回调地址
- 用户在认证中心完成登录,回跳时带回授权码
- 应用用授权码换取访问令牌
- 之后请求携带令牌访问 API
几个实践细节
回调地址必须白名单校验;授权码一次有效且有效期很短;刷新令牌需要轮换,旧令牌立即失效。
统一登录的难点不在协议,而在各应用对「会话」的理解不一致。
落地之后,新增一个应用的接入成本从两天降到半小时,这大概是最直观的收益。