4. SSO 架构设计:集中式认证中心、代理认证模式、网关认证模式
单点登录(SSO)的核心在于将分散在各应用系统中的认证逻辑抽离,形成统一的认证层。根据认证层与业务系统的交互方式及部署位置,业界形成了三种主流架构模式:集中式认证中心模式、代理认证模式和网关认证模式。每种模式在会话管理粒度、网络拓扑要求、改造成本和异步任务编排的适配性上存在显著差异。
4.1 集中式认证中心模式(Centralized Authentication Center, CAC)
这是最经典的 SSO 架构,所有应用系统将用户认证请求重定向至一个独立的认证中心服务。认证中心负责颁发全局票据(Ticket),应用系统通过验证票据来建立本地会话。
核心特征:认证与业务完全解耦,认证中心作为独立的基础设施存在,不参与业务逻辑。
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 中的用户信息。
4.2.1 会话管理特点
- 会话集中化:代理层统一管理会话状态(如 Redis 集中存储 Session),后端应用无状态化。
- Header 传递:代理层通过 HTTP Header 将用户身份、角色、租户 ID 传递给后端,后端直接信任。
- 异步任务编排点:代理层可异步执行会话校验、Token 刷新、访问日志记录,不阻塞请求转发主路径。
安全风险:后端应用必须严格校验 Header 来源,防止外部请求伪造 Header。建议在代理层与后端之间使用 mTLS 或内部网络隔离,并清除来自外部的同名 Header。
4.3 网关认证模式(Gateway Authentication Mode)
网关认证模式是微服务架构下的主流选择。API 网关作为所有流量的统一入口,在网关层完成认证与鉴权,然后将已认证的请求路由至下游微服务。网关通常集成 OAuth2 / JWT 校验逻辑,并支持动态路由和限流。
核心特征:认证与路由一体化,网关既是流量入口也是安全边界,适合云原生和容器化部署。
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)来优化以下场景:
- 票据验证链:并行验证票据签名、有效期、黑名单状态。
- 会话同步:用户登录后,异步将全局会话同步至多个应用系统的本地会话缓存。
- 登出广播:用户登出时,异步通知所有已注册的应用系统销毁本地会话。
- Token 预刷新:在 Token 过期前,异步预刷新并推送至客户端,避免请求中断。
- 审计日志:认证成功/失败事件异步写入日志系统,不阻塞认证主流程。
注意:异步任务编排虽然能提升吞吐和响应速度,但会引入最终一致性问题。在 SSO 场景中,登出广播和会话同步必须保证至少一次投递(At-Least-Once Delivery),避免出现用户已登出但应用仍认为有效的安全漏洞。