单点登录(Single Sign-On,SSO)是现代企业级应用和大型分布式架构中的核心组件,旨在为用户提供“一次登录,处处访问”的便捷与安全体验。面对不同的业务场景和技术栈,如何选择最合适的SSO方案呢?本文将对几种主流的技术方案进行详细的对比分析。

基于 Cookie/Session 的同域 SSO 方案
这种方案的核心思想非常简单:用户只需在统一的认证中心登录一次,系统会颁发一个会话 Cookie 或 Token 作为通行证。

它的典型工作模式是:由一个独立的统一认证站点(Auth Server)负责认证,多个业务应用共享认证结果。当用户认证成功后,认证中心会在浏览器的顶级域(例如 .example.com)下写入一个加密的 Cookie。此后,当用户访问其他业务系统时,该系统会读取这个 Cookie,并向后端的认证中心验证,以此换取用户信息并建立本地会话。
这种方案的优点非常明显:
- 实现简单:逻辑直观,对开发人员友好。
- 兼容性好:特别适合改造遗留的老系统,前后端的改动量相对较小。
但其局限性也同样突出:
- 强依赖浏览器Cookie:这在跨域、跨组织的场景下支持很差。
- 平台支持不足:对于移动端App、第三方SaaS集成等非纯Web场景显得力不从心。
因此,它最适合以下场景:
企业内部的老系统集成、内部门户建设,或者所有Web应用都归属于同一个顶级域名之下的情况。
基于 Token(JWT/OAuth2)的分布式 SSO 方案
随着应用架构向微服务和跨平台发展,基于Token的方案成为了更主流的选择。用户认证后,由独立的认证服务颁发一个访问令牌,例如一个签名的JWT(JSON Web Token)。

各个业务子系统(客户端)在接收到请求时,无需再频繁调用认证中心,只需验证令牌本身的有效性即可。验证方式可以是使用公钥验证JWT的签名,或者调用授权服务器的令牌信息查询(introspection)接口。
这种方案通常与 OAuth 2.0 或 OpenID Connect (OIDC) 标准结合使用,能够很好地覆盖 Web、移动端和 API 接口等多种场景。
它的优势在于:
- 良好的跨域与跨平台支持:Token可以通过HTTP Header轻松传递,不受同源策略限制。
- 无状态或可扩展为无状态:服务端无需存储会话,易于水平扩展。
- 标准化与生态成熟:OAuth2/OIDC是行业标准,有丰富的库和最佳实践支持,也便于实现细粒度授权和第三方接入。
需要考虑的挑战包括:
- 令牌管理:令牌的刷新、撤销机制设计相对复杂,需要考虑安全性和用户体验的平衡。
适用场景:
全新的系统建设、云原生与微服务架构、需要对接第三方SaaS服务,或者要求App与Web端拥有统一登录体验的项目。
基于中央认证服务器(CAS)的 SSO 方案
CAS(Central Authentication Service)是一套非常经典且协议严谨的SSO解决方案。它通过一个独立的中央认证服务器来分发和管理“票据”。

理解CAS,关键是弄懂两种票据:
- TGC:存在于用户浏览器与CAS服务器之间的Cookie,用于证明用户已在CAS服务器登录。
- ST:一个一次性、有效期很短的Service Ticket,通过URL参数传递给具体的业务应用。
其核心流程可以概括为:
- 用户访问业务应用A,应用发现用户未登录,将其重定向至CAS服务器。
- 用户在CAS服务器登录成功,CAS服务器创建全局会话,生成一个ST,并将用户重定向回应用A(携带ST)。
- 应用A在后端向CAS服务器提交这个ST进行校验。
- CAS服务器校验ST有效后,返回用户标识。应用A随即为用户创建本地会话。ST在一次验证后即失效,实现了“阅后即焚”。
CAS协议的优势:
- 安全性高:关键验证步骤在后端完成,敏感票据(ST)不会在浏览器端长期留存。
- 协议严谨:经过多年发展和企业级检验,流程清晰可靠。
不足之处:
- 逻辑相对较重:业务系统需要集成特定的CAS客户端库,有一定接入成本。
总结与选型建议
三种主流的单点登录方案各有千秋,选择哪种往往取决于你的具体需求和技术背景。
- 追求快速落地和兼容历史系统:如果所有应用都在同一个主域名下,基于Cookie/Session的同域SSO是最简单直接的选择。
- 构建现代化、跨平台的应用体系:如果你的技术栈较新,涉及微服务、移动端或第三方集成,那么基于Token(特别是OAuth 2.0 / OIDC)的方案无疑是更灵活、更面向未来的选择。
- 需要高安全性的传统企业级场景:如果对安全协议有严格要求,且不介意一定的集成复杂度,CAS协议提供了一个经过验证的、可靠的企业级解决方案。
在实际架构设计中,也常常看到这些方案的组合使用。例如,在一个大型系统中,内部微服务之间采用JWT进行无状态认证,而对外的Web门户则采用基于Cookie的SSO以提供更好的用户体验。希望本文的对比能帮助你在微服务与分布式架构的设计中,做出更合适的技术选型。更多关于系统架构、高并发的深入讨论,欢迎在云栈社区与广大开发者共同交流。
|