Files
Qiniu/technical/sso.md
T

3.3 KiB
Raw Blame History

tags, create time
tags create time
sso
auth
architecture
2026-07-13 10:03

SSO 单点登录

概述

SSO(Single Sign-On,单点登录)是一种身份认证方案:用户只需登录一次,即可访问所有相互信任的应用系统。核心目标是统一身份源、降低登录摩擦、集中安全管控。

[!info] 什么时候需要 SSO? 当你的组织内有 3 个以上的应用需要用户登录时,就该认真考虑 SSO 了。否则每多一个系统就多一套账号密码,用户体验和安全管控都是灾难。

核心原理

SSO 的本质是一个认证委托模型:

sequenceDiagram
    participant U as 用户
    participant App as 业务应用
    participant IdP as 身份提供商 (IdP)

    U->>App: 1. 访问受保护资源
    App->>IdP: 2. 重定向到登录页
    U->>IdP: 3. 输入凭证
    IdP-->>U: 4. 颁发 SSO Token / Session
    IdP->>App: 5. 回调 + 认证凭证
    App->>IdP: 6. 验证凭证有效性
    IdP-->>App: 7. 返回用户身份信息
    App-->>U: 8. 授予访问权限

三个核心角色:

角色 全称 职责
User End User 发起请求的终端用户
SP Service Provider(服务提供方) 业务应用,依赖 IdP 做认证
IdP Identity Provider(身份提供商) 统一认证中心,管理用户身份

[!tip] SP vs IdP 简单记忆:IdP 知道「你是谁」,SP 知道「你能干什么」。SP 把「你是谁」这件事委托给了 IdP。

主流协议概览

协议 时代 传输方式 典型场景
CAS 2000+ 浏览器重定向 + Ticket 企业内部门户、高校系统
SAML 2.0 2005+ XML + 浏览器重定向 企业级 SSO、SaaS 集成
OAuth 2.0 2012+ HTTPS API 第三方授权、API 访问控制
OIDC 2014+ HTTPS API (JWT) 现代 Web / 移动端 / SPA

详细文档见各子笔记:

关键概念

Session 与 Token 的区别

维度 Session-Cookie Token (JWT)
存储位置 服务端 客户端
扩展性 需要共享 Session Store 天然无状态
跨域 Cookie 受同源策略限制 Header 传递,无跨域问题
撤销 删除 Session 即可 需要黑名单或短过期时间

SSO 的两种实现思路

1. 共享 Session(Cookie Domain 共享)

IdP 登录后写入一个顶级域的 Cookie,所有 SP 通过访问 IdP 的验证端点来确认登录状态。实现简单但受限于同主域。

2. 分布式 Token(标准协议方式)

IdP 颁发 Token,SP 独立验证。跨域、跨平台无障碍,是当前主流方案。

[!warning] 安全要点

  • 始终使用 HTTPS,Token 一旦泄露等同于身份被盗
  • Token 有效期不宜过长,Access Token 建议 5-30 分钟
  • 使用 state 参数防 CSRF,nonce 参数防重放攻击

关联笔记