完整架构

完整的用户认证与会话系统拆成四层:身份入口层、凭证与会话层、联邦身份层、风险与审计层。每一层只解决一类问题,层与层之间通过明确的接口衔接。

分层架构

┌─────────────────────────────────────────────────────────────────┐
│                       身份入口层                                │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐      │
│  │ 注册登录 │  │ 找回密码 │  │ SSO 登录 │  │ OAuth 登录│      │
│  └─────┬────┘  └─────┬────┘  └─────┬────┘  └─────┬────┘      │
│        └──────────────┴──────────────┴──────────────┘            │
└──────────────────────────────┼───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                     凭证与会话层                                │
│  ┌──────────────────────────┐  ┌──────────────────────────┐   │
│  │  认证服务                │  │  会话服务                │   │
│  │  验证凭证 / 检查状态     │  │  创建 / 续期 / 撤销      │   │
│  └──────────────────────────┘  └──────────────────────────┘   │
│  ┌──────────────────────────┐                                  │
│  │  令牌服务                │                                  │
│  │  Access / Refresh / 轮换 │                                  │
│  └──────────────────────────┘                                  │
└──────────────────────────────┼───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                       联邦身份层                                │
│  ┌──────────────────────────┐  ┌──────────────────────────┐   │
│  │  IdP 认证中心            │  │  授权服务(OAuth)        │   │
│  │  全局会话 / 身份断言     │  │  code / token / scope     │   │
│  └──────────────────────────┘  └──────────────────────────┘   │
└──────────────────────────────┼───────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                       风险与审计层                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐      │
│  │ MFA 服务 │  │ 风控引擎 │  │ 设备管理 │  │ 审计日志 │      │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘      │
└─────────────────────────────────────────────────────────────────┘

最终登录链路

一次典型登录可以这样发生:

用户提交账号密码或选择第三方登录

认证服务验证凭证,检查账号状态和登录风险

风险较高时触发 MFA(TOTP / WebAuthn / 恢复码)

登录成功:创建会话,签发 Access Token 和 Refresh Token

客户端后续请求携带 Access Token

Access Token 过期后,用 Refresh Token 换新令牌(可轮换、可撤销)

修改密码 / 冻结账号 / 异常检测时,撤销相关会话

所有登录、刷新、撤销和 MFA 操作写入审计日志

核心数据

数据作用
user_account用户账号、状态、密码哈希、认证方式
session登录设备、过期时间、撤销状态、风险等级
refresh_token长期凭证、轮换状态、绑定设备
identity_bindingOAuth、SSO 等外部身份绑定
mfa_factor用户启用的 TOTP、WebAuthn、恢复码
auth_audit_log登录、失败、刷新、撤销、MFA、异常记录

密码、Refresh Token、MFA 备用码都属于高敏数据,必须加密或哈希存储,绝不能明文落库。

高可用与安全边界

  • 认证中心是高价值目标:SSO 的 IdP、Token 签发服务一旦被攻破,等于所有系统的钥匙都被拿走。要独立部署、最小权限、单独监控。
  • 失败要有兜底:MFA 服务不可用时,要有降级策略(例如临时提升风险等级而不是全部放行);令牌服务要支持密钥轮换。
  • 撤销要快速生效:JWT 的撤销有天然延迟,需要用短有效期 + 黑名单/版本号来控制撤销窗口。

这套架构的关键在于:每一层都职责单一,信任可以建立、延续、提升、收回和追踪。