初始模型:

多个子系统都不自己单独登录,而是统一跳转到一个认证中心。用户只在认证中心登录一次,之后访问其他子系统时,认证中心根据自己的 Session / Cookie 判断用户已经登录,从而实现无感登录。

  • 统一认证中心:多个系统需要共享同一个登录身份 → 所有子系统都信任同一个认证中心
  • 首次登录:用户第一次访问子系统时还没有登录态 → 跳转认证中心完成登录,并在认证中心域名下保存 Session / Cookie
  • Authorization Code:不能直接把 Token 暴露在浏览器跳转里 → 认证成功后先返回临时 Code
  • Code 换 Token:子系统需要拿到自己的登录凭证 → 子系统后端拿 Code 去认证中心换 Token
  • 无感登录:访问第二个系统时不希望再次输入密码 → 再次跳认证中心时,浏览器自动携带认证中心 Cookie,认证中心识别已登录后直接发 Code
  • OIDC / OAuth 2.0:需要标准化实现登录和授权流程 → 登录身份认证通常用 OIDC,底层基于 OAuth 2.0
  • 单点登出:认证中心退出后,各子系统原来的 Token 可能还有效 → 删除认证中心 Session,同时通知子系统撤销 Session / Token,或加入黑名单
  • Token 过期控制:撤销所有 JWT 成本可能较高 → Access Token 设短有效期,Refresh Token 在退出时立即失效

最后主线就是:

统一认证中心 → 首次登录留下 Cookie/Session → Code → 后端换 Token → 其他系统再次跳认证中心时自动识别登录态 → 实现 SSO → 退出时统一撤销登录态。