4. SSO 架构设计:集中式认证中心、代理认证模式、网关认证模式

单点登录(SSO)的核心在于将分散在各应用系统中的认证逻辑抽离,形成统一的认证层。根据认证层与业务系统的交互方式及部署位置,业界形成了三种主流架构模式:集中式认证中心模式、代理认证模式和网关认证模式。每种模式在会话管理粒度、网络拓扑要求、改造成本和异步任务编排的适配性上存在显著差异。

4.1 集中式认证中心模式(Centralized Authentication Center, CAC)

这是最经典的 SSO 架构,所有应用系统将用户认证请求重定向至一个独立的认证中心服务。认证中心负责颁发全局票据(Ticket),应用系统通过验证票据来建立本地会话。

核心特征:认证与业务完全解耦,认证中心作为独立的基础设施存在,不参与业务逻辑。
集中式认证中心模式架构 用户浏览器 应用系统 A 应用系统 B 应用系统 C 集中认证中心 (CAS / OAuth2) 流程:用户访问任一应用 → 重定向至认证中心 → 认证中心验证凭证 → 下发全局票据 → 应用验证票据建立本地会话

4.1.1 会话管理特点

  • 全局会话:认证中心维护一个全局会话(Global Session),用户登录后生成全局票据(如 CAS 的 TGT)。
  • 本地会话:每个应用系统维护自己的本地会话(Local Session),通过验证票据后创建。
  • 异步任务编排点:票据验证、会话同步、登出广播是典型的异步任务节点,适合使用 CompletableFuture 或编排引擎进行并行/串行调度。
适用场景:企业内网多系统集成,系统数量在 5~50 个之间,各系统技术栈异构(Java、.NET、PHP 混部)。改造成本中等,每个应用需集成认证客户端 SDK。

4.2 代理认证模式(Proxy Authentication Mode)

代理认证模式在用户与应用系统之间插入一个认证代理层(如反向代理、Agent 插件)。代理层拦截所有 HTTP 请求,负责执行认证逻辑,并将已认证的用户身份信息通过 HTTP Header 传递给后端应用。后端应用不再直接处理认证,而是信任代理传递的身份标识。

核心特征:零侵入应用代码,认证逻辑完全由代理层承载,后端应用只需读取 Header 中的用户信息。
代理认证模式架构 用户浏览器 认证代理层 (Nginx + Lua / Envoy) 后端应用 A 后端应用 B 后端应用 C 流程:请求到达代理层 → 代理层执行认证(Cookie/Session/Token) → 注入 X-User-Id / X-Auth-Token Header → 转发至后端

4.2.1 会话管理特点

  • 会话集中化:代理层统一管理会话状态(如 Redis 集中存储 Session),后端应用无状态化。
  • Header 传递:代理层通过 HTTP Header 将用户身份、角色、租户 ID 传递给后端,后端直接信任。
  • 异步任务编排点:代理层可异步执行会话校验、Token 刷新、访问日志记录,不阻塞请求转发主路径。
安全风险:后端应用必须严格校验 Header 来源,防止外部请求伪造 Header。建议在代理层与后端之间使用 mTLS 或内部网络隔离,并清除来自外部的同名 Header。

4.3 网关认证模式(Gateway Authentication Mode)

网关认证模式是微服务架构下的主流选择。API 网关作为所有流量的统一入口,在网关层完成认证与鉴权,然后将已认证的请求路由至下游微服务。网关通常集成 OAuth2 / JWT 校验逻辑,并支持动态路由和限流。

核心特征:认证与路由一体化,网关既是流量入口也是安全边界,适合云原生和容器化部署。
网关认证模式架构 用户 / 客户端 API 网关 (Kong / Spring Cloud Gateway) 认证 + 鉴权 + 路由 认证服务 (OAuth2) 微服务 A 微服务 B 微服务 C 流程:请求到达网关 → 网关调用认证服务校验 JWT/Token → 鉴权通过后路由至对应微服务 → 微服务从 Token 中提取用户信息

4.3.1 会话管理特点

  • 无状态 Token:网关认证模式通常采用 JWT 或 OAuth2 Token,网关校验 Token 签名后即完成认证,无需维护服务端会话。
  • 异步任务编排点:Token 的签名验证、黑名单检查、刷新 Token 的异步预加载、审计日志的异步写入,均可编排在网关过滤链中。
  • 分布式会话:若需保持状态(如短信验证码、临时授权码),网关可对接分布式缓存(Redis)进行异步读写。

4.4 三种模式对比

对比维度 集中式认证中心 代理认证模式 网关认证模式
应用侵入性 中(需集成 SDK) 低(零代码改造) 低(微服务无感知)
会话存储 全局 + 本地双会话 代理层集中存储 无状态 Token / 分布式缓存
异步编排复杂度 中(票据验证、登出广播) 低(Header 注入、日志) 高(过滤链编排、Token 预检)
网络依赖 应用需回调认证中心 代理层统一转发 网关统一入口
典型实现 CAS、Apereo CAS Nginx + Lua、OpenResty Spring Cloud Gateway、Kong
适用架构 传统企业应用 遗留系统改造 云原生微服务
架构选型建议:如果团队正在从单体向微服务演进,推荐从集中式认证中心过渡到网关认证模式。代理认证模式最适合遗留系统快速接入 SSO,但需注意 Header 注入的安全加固。

4.5 异步任务编排的切入点

无论采用哪种架构模式,SSO 流程中都存在多个可异步化的任务节点。在后续章节中,我们将重点讲解如何利用异步任务编排框架(如 CompletableFuture、Temporal、Camunda)来优化以下场景:

  1. 票据验证链:并行验证票据签名、有效期、黑名单状态。
  2. 会话同步:用户登录后,异步将全局会话同步至多个应用系统的本地会话缓存。
  3. 登出广播:用户登出时,异步通知所有已注册的应用系统销毁本地会话。
  4. Token 预刷新:在 Token 过期前,异步预刷新并推送至客户端,避免请求中断。
  5. 审计日志:认证成功/失败事件异步写入日志系统,不阻塞认证主流程。
注意:异步任务编排虽然能提升吞吐和响应速度,但会引入最终一致性问题。在 SSO 场景中,登出广播和会话同步必须保证至少一次投递(At-Least-Once Delivery),避免出现用户已登出但应用仍认为有效的安全漏洞。