什么是单点登录(Single Sign-On,SSO)?
单点登录(SSO) 是指用户只需要登录一次,就可以在多个相互关联的系统、应用或网站中自动获得访问权限,无需在每个系统重复输入用户名和密码。
通俗解释:
就像你用同一个微信账号可以直接登录微信小程序、微信支付、微信读书、视频号等多个服务,而不需要每次都重新登录。
核心价值:
- 用户体验好:一次登录,到处通行
- 安全性高:减少密码重复输入,降低泄露风险
- 管理方便:统一账号管理,注销时可一次性失效所有权限
单点登录的三种主流实现方式
以下是目前最常见的三种 SSO 实现方案,对比清晰明了:
| 实现方式 | 核心协议/技术 | 适用场景 | 优点 | 缺点/注意事项 | 典型产品/框架 |
|---|---|---|---|---|---|
| 1. CAS(Central Authentication Service) | CAS 协议(开源) | 企业内部系统、校园网、开源项目 | 简单、成熟、支持多种语言 | 部署稍复杂,需要自己搭建 CAS Server | CAS Server、Apereo CAS |
| 2. OAuth 2.0 + OpenID Connect | OAuth 2.0 + OIDC(现代主流) | 互联网应用、第三方登录、移动端 | 安全、灵活、支持移动端和 API | 实现复杂,需要理解授权流程 | Google、微信、GitHub、Keycloak、Auth0 |
| 3. SAML(Security Assertion Markup Language) | SAML 2.0(XML 格式) | 大型企业、跨组织联邦身份认证 | 安全性极高、企业级标准 | 配置复杂、XML 冗长、移动端支持差 | Okta、Ping Identity、Azure AD、OneLogin |
三种方式详细说明
1. CAS(最传统的企业内部 SSO)
- 工作流程:
- 用户访问系统 A → 被重定向到 CAS Server 登录
- 登录成功后,CAS Server 返回 Ticket(ST/TGT)
- 系统 A 拿着 Ticket 去 CAS Server 验证
- 访问系统 B 时直接携带 Ticket,无需再次登录
- 典型场景:大学校园网(学生一次登录,可访问教务系统、图书馆、邮箱等)
- 优点:部署简单、开源免费、支持 Java、PHP、.NET 等多种语言
2. OAuth 2.0 + OpenID Connect(目前互联网最主流)
- 工作流程(以“微信登录”为例):
- 用户点击“微信登录” → 跳转到微信授权页面
- 用户同意授权 → 微信返回授权码(code)
- 你的服务器用 code 换取 access_token + id_token
- 用 id_token 获取用户信息(openid、昵称等)
- 以后访问其他关联系统时,直接用 token 认证
- 典型场景:用微信/QQ/微博/钉钉/企业微信登录各种 App
- 优点:支持移动端、API 友好、全球通用标准
- 关键扩展:OpenID Connect(OIDC)在 OAuth 2.0 基础上增加了身份认证功能
3. SAML(企业级联邦身份认证)
- 工作流程:
- 用户访问系统 A → 被重定向到 IdP(身份提供商,如公司统一登录门户)
- 用户在 IdP 登录 → IdP 返回 SAML Assertion(XML 断言)
- 系统 A 验证 Assertion,确认身份
- 访问系统 B 时,IdP 再次生成 Assertion,无需重新输入密码
- 典型场景:跨公司合作、大型集团内部(如阿里云、AWS 企业版登录)
- 优点:安全性最高、支持单点注销(SLO)、企业级标准
- 缺点:配置复杂、XML 格式冗长
快速对比总结(一句话记住)
| 场景 | 推荐方案 |
|---|---|
| 企业内部系统 | CAS 或 SAML |
| 互联网产品、第三方登录 | OAuth 2.0 + OIDC |
| 大型企业、跨组织认证 | SAML |
| 移动端 + API 优先 | OAuth 2.0 + OIDC |
实际项目中最常用的组合
- 企业内部:Keycloak(支持 CAS + OAuth + SAML,一站式解决)
- 互联网应用:OAuth 2.0 + OIDC(微信登录、GitHub 登录等)
- 混合场景:Spring Security + OAuth2 或 Shiro + CAS
掌握了这三种方式,你就能应对 99% 的单点登录需求。如果你要具体代码实现(Java/Spring、Node.js、PHP 等),或者某个方案的详细配置步骤,随时告诉我!