Skip to content

单点登录的实现方案

单点登录(SSO,Single Sign-On)是一种认证机制,允许用户在一次登录后,访问多个系统或应用而无需重复登录。下面是常见的单点登录实现方案,包括思路、技术选型和适用场景:

🔧 一、单点登录的核心思路

  1. 用户登录统一认证中心(SSO Server)
  2. 认证中心验证身份后签发令牌(Token/Cookie/Session)
  3. 客户端或子系统通过该令牌进行身份校验
  4. 在不同系统间共享登录状态(通过 Token 传递、Cookie 共享、后端会话等)

🧩 二、常见的实现方案

✅ 特点

  • 简单易实现
  • 需要系统部署在同一个主域下(如 a.example.comb.example.com

🛠 实现方式

  • 设置主域名的 Cookie(例如 .example.com
  • 子系统共享此 Cookie,自动携带认证信息

🔒 安全点

  • HTTPS 加密
  • 设置 HttpOnlySecure 属性
  • 防 CSRF 攻击

2. 基于 Token(JWT)+ 前后端分离

✅ 特点

  • 前后端解耦,适用于微服务架构
  • Token(通常是 JWT)保存在客户端(localStorage、sessionStorage、Cookie)

🛠 实现方式

  • 用户登录后,SSO 服务签发 JWT
  • 前端保存 Token,访问其他系统时附加 Token 头部(Authorization: Bearer xxx)
  • 资源服务器验证 JWT 签名及有效期

🔒 安全点

  • Token 加密/签名
  • Token 过期与刷新机制(Refresh Token)
  • 防止 Token 泄露

3. 使用 OAuth 2.0 / OpenID Connect 实现单点登录

✅ 特点

  • 标准协议,兼容性强
  • 支持第三方接入(如 GitHub 登录、Google 登录)
  • 可用于异构系统之间的认证

🛠 实现方式

  • 用户在 SSO Provider(如 Auth0、Keycloak)登录
  • 授权码模式(Authorization Code)为主流程
  • 系统作为 OAuth Client,与认证服务器通信获取 Token

📘 推荐开源组件:

4. CAS(Central Authentication Service)

✅ 特点

  • 经典 Java 实现的单点登录协议
  • 学校、企业内部系统常用

🛠 实现方式

  • 用户登录 CAS Server,获得 Ticket
  • 子系统拿 Ticket 请求 CAS Server 验证
  • 验证成功后建立本地会话

🏗 三、系统架构图(简化版)

                +-------------------+
                |  SSO 认证中心     |
                +-------------------+
                          |
                 +--------+--------+
                 |                 |
         +---------------+  +---------------+
         | 子系统 A       |  | 子系统 B       |
         +---------------+  +---------------+
                ↑   ↓             ↑   ↓
             用户访问(携带 Token 或 Cookie)

📌 四、选型建议

场景推荐方案
同域名系统Cookie 共享
跨域、前后端分离系统JWT / OAuth2
微服务架构、身份集中管理OAuth2 / OpenID Connect / Keycloak
企业/高校内部系统CAS