SSO 是什么
一句话总结
用户在一个地方登录一次,就能访问所有关联的应用,不用每个都单独输入账号密码。
🤔 为什么会有它 / 解决了什么问题
以前每个网站/应用都要单独注册账号、设密码。公司内部有 10 个工具,员工就要记 10 套密码。IT 部门要管 10 套账号的增删改。员工离职要逐一注销 10 个账号——任何一个漏掉就是安全隐患。
SSO 解决的就是这个”账号碎片化”问题:一套账号,通吃所有。
🔍 具体原理 / 运作逻辑
SSO 由三个角色组成:
- IDP(身份提供者):存用户、管密码、负责说”这个人是这个人”。相当于公安局身份认证中心。
- SP(Service Provider / 服务提供者):各业务应用(Grafana、n8n、Outline),它们自己不存密码,信任 IDP 的判断。相当于商场里的各店铺。
- 认证协议:IDP 和 SP 之间的”通信语言”。目前最主流的是基于 OAuth 2.0 的 OIDC(OpenID Connect)。
流程:你打开 SP → SP 问你”你是谁”→ 跳转 IDP 登录页 → 你输入密码 → IDP 发一张”身份令牌”给 SP → SP 读令牌,知道你是谁 → 放行。
更硬核的技术细节(点击展开)
实际上 SSO 有几种实现方式:
- 基于 Cookie:同一个域名下(如
*.getgrowth.app),共享 Cookie,Frappe 登录后其他子域名读到同一 Session- 基于 OIDC/OAuth 2.0:跨域场景,通过令牌传递身份信息
- 基于 SAML:企业级老协议,XML 格式,微软/Okta 常用
我们要用的是 OIDC,因为它简单、现代、Frappe 原生支持。
🧭 什么情况下会用到 / 什么场景会遇到它
- 公司内部有多个工具(Dokploy、Grafana、n8n、Outline…)希望统一登录
- 客户访问你的 SaaS 平台,一个账号用所有功能模块
- 任何”登录一次,到处能进”的需求
⚖️ 副作用 / 代价 / 取舍
- 单点故障:IDP 挂了,所有应用都登不进去。需要保证 IDP 的高可用
- 安全集中化:IDP 被攻破 = 所有应用全暴露。IDP 的安全等级必须最高
- 耦合性:每个新接入的应用都要配置 OIDC Client,不是即插即用
🕰️ 来历
- SAML(老协议):2005 年 OASIS 标准
- OAuth 2.0:2012 年 RFC 6749
- OIDC:2014 年基于 OAuth 2.0 之上构建,由 OpenID Foundation 维护
🔗 关联 / 经常一起出现的概念
- OIDC:SSO 最主流的实现协议,Frappe 正是用它做身份提供者
- SSO 和 OIDC 的关系:SSO 是目标(单点登录),OIDC 是实现手段(怎么做到)
- OAuth 2.0:OIDC 的底层框架,负责”授权”
- ID Token:SSO 流程中传递”你是谁”的令牌
⚠️ 注意事项 / 常见误区
- SSO ≠ OAuth 2.0。OAuth 是授权(允许 A 访问 B),OIDC 才是身份认证(证明你是谁)
- 不是所有应用都支持 OIDC。选型时优先选支持 OIDC/SAML 的工具
📎 记忆锚点
一个公安局(IDP),给每家商场(SP)签发身份证(ID Token)。你进任何商场,亮一下身份证就行。
📝 更新日志
| 日期 | 改动 | 原因 |
|---|---|---|
| 2026-07-09 | 首次创建 | Frappe SSO/OIDC 集成准备 |