企业认证与安全体系(九):单点登录 SSO 到底是怎么实现的?一篇讲透企业统一身份认证

📅 2026/7/6 1:43:48 👁️ 阅读次数 📝 编程学习
企业认证与安全体系(九):单点登录 SSO 到底是怎么实现的?一篇讲透企业统一身份认证

上一篇我们讲了:

《企业认证与安全体系(八):企业为什么都在用 RBAC?一篇讲透权限模型设计》

到这里,我们已经把认证和授权的核心内容串起来了:

双 Token Token + Redis JWT Spring Security Gateway OAuth2 RBAC

前面几篇主要解决的是:

用户怎么登录? 登录态怎么维护? 接口怎么鉴权? 权限怎么控制?

但是企业系统里还有一个非常常见的问题:

公司有很多系统,用户难道每个系统都要登录一次吗?

例如一个企业内部可能有:

OA 系统 CRM 系统 ERP 系统 财务系统 工单系统 审批系统 数据报表系统

如果每个系统都有一套自己的登录页面、账号密码、登录态维护逻辑,那用户体验会很差,系统维护也会很混乱。

于是,企业里就出现了一个非常重要的能力:

SSO,单点登录。

今天我们就从工程视角讲透:

单点登录 SSO 到底是怎么实现的?


一、先说结论

SSO,全称是:

Single Sign-On

中文叫:

单点登录

它解决的核心问题是:

用户只需要登录一次,就可以访问多个相互信任的系统。

例如:

用户登录统一认证中心 ↓ 访问 OA 系统 ↓ 访问 CRM 系统 ↓ 访问 ERP 系统 ↓ 都不需要重复登录

所以 SSO 的核心不是“怎么生成 Token”。

而是:

多个系统如何共享同一个登录状态。


二、为什么企业需要 SSO?

如果没有 SSO,每个系统都自己做登录。

例如:

OA 系统有一套登录 CRM 系统有一套登录 ERP 系统有一套登录 财务系统有一套登录

这会带来很多问题。


1. 用户体验差

用户每天上班可能需要打开多个系统。

如果每个系统都要登录一次:

登录 OA 登录 CRM 登录 ERP 登录财务系统

体验非常差。


2. 账号体系混乱

每个系统都维护自己的用户表。

时间久了就会出现:

OA 里有张三 CRM 里也有张三 ERP 里还有一个张三

但这些账号是不是同一个人?

密码是不是一致?

离职后是不是都禁用了?

这些都会变得很麻烦。


3. 安全风险高

如果员工离职,只在 OA 系统禁用了账号,但 CRM 或 ERP 还没禁用,就会出现安全隐患。

企业希望做到:

一个地方禁用 所有系统立即失效

这就需要统一身份认证。


4. 系统重复建设

如果每个系统都自己实现:

登录 密码加密 Token 生成 Token 刷新 权限校验 账号禁用 密码重置

就会大量重复建设。

所以企业通常会把这些能力抽出来,形成统一认证中心。


三、SSO 的本质是什么?

SSO 的本质是:

把登录能力从各个业务系统中抽离出来,交给统一认证中心。

也就是说:

业务系统不再自己处理登录 而是统一跳转到认证中心登录

认证中心负责:

用户登录 身份校验 Token 签发 登录态维护 统一退出 账号禁用

业务系统负责:

接收认证结果 识别当前用户 执行业务逻辑

这样整个体系就清晰了。

用户 ↓ 统一认证中心 ↓ 业务系统 A ↓ 业务系统 B ↓ 业务系统 C

四、普通登录和 SSO 有什么区别?

普通登录是:

用户登录系统 A 系统 A 自己校验账号密码 系统 A 自己生成登录态

如果用户访问系统 B,还要再登录一次。

而 SSO 是:

用户访问系统 A 系统 A 发现用户未登录 跳转到统一认证中心 用户在认证中心登录 认证中心返回登录结果 系统 A 建立登录态 用户再访问系统 B 系统 B 发现用户未登录 跳转到认证中心 认证中心发现用户已经登录 直接返回登录结果 系统 B 建立登录态

用户感受到的是:

我只登录了一次 后面访问其他系统都自动登录了

这就是单点登录。


五、SSO 的核心角色

一个典型 SSO 系统一般包含三个角色。

角色含义
用户使用系统的人
认证中心统一登录平台
业务系统OA、CRM、ERP 等具体系统

例如:

用户 ↓ 认证中心 ↓ OA 系统 ↓ CRM 系统 ↓ ERP 系统

认证中心是整个 SSO 的核心。

业务系统不再直接处理用户名密码,而是信任认证中心的认证结果。


六、SSO 的典型流程

我们用一个例子来讲。

假设用户要访问 OA 系统。

1. 用户访问 OA 系统

用户访问 oa.company.com

OA 系统发现:

当前用户未登录

于是跳转到统一认证中心:

auth.company.com

2. 用户在认证中心登录

认证中心展示登录页面。

用户输入:

账号 密码 验证码

认证中心校验成功后,建立自己的登录态。

例如:

SSO_SESSION

这个登录态保存在认证中心域名下。


3. 认证中心返回登录结果

认证中心会把用户带回 OA 系统。

同时返回一个认证结果。

常见方式是返回一个临时 code:

https://oa.company.com/callback?code=abc123

OA 系统拿到 code 后,向认证中心换取用户信息或 Token。


4. OA 系统建立自己的登录态

OA 系统拿到用户信息后,建立自己的登录态。

例如:

OA_TOKEN

或者生成自己系统内的 JWT。

此时用户就可以正常访问 OA 系统。


5. 用户访问 CRM 系统

用户接着访问:

crm.company.com

CRM 系统发现用户未登录,也跳转认证中心。

但认证中心发现:

用户已经在认证中心登录过

于是不用再让用户输入账号密码,而是直接返回认证结果给 CRM。

CRM 再建立自己的登录态。

这就是:

一次登录,多系统访问。


七、为什么 SSO 需要认证中心?

SSO 最关键的设计就是认证中心。

因为多个系统之间不应该互相保存用户密码。

例如:

OA 不应该知道用户在 CRM 的登录状态 CRM 不应该知道用户在 ERP 的登录状态 ERP 不应该保存所有系统的密码逻辑

所以需要一个统一可信的地方:

认证中心

所有业务系统都信任认证中心。

业务系统只关心:

认证中心说这个用户是谁 这个用户是否已经登录

不关心账号密码具体怎么校验。

这就是 SSO 的核心架构思想。


八、SSO 和 Cookie 的关系

在 Web 场景下,SSO 很多时候离不开 Cookie。

因为浏览器访问认证中心后,认证中心可以在自己的域名下写入 Cookie。

例如:

auth.company.com

写入:

SSO_SESSION=xxxx

下次任何业务系统跳转到:

auth.company.com

浏览器都会自动带上这个 Cookie。

认证中心就知道:

这个用户已经登录过

于是可以直接返回认证结果。

所以在传统 Web SSO 中,Cookie 是实现单点登录体验的重要基础。


九、跨域系统怎么共享登录态?

很多人会问:

OA 是:

oa.company.com

CRM 是:

crm.company.com

认证中心是:

auth.company.com

它们是不同系统,怎么共享登录态?

关键点是:

业务系统之间不是直接共享 Cookie,而是都通过认证中心确认登录状态。

流程是:

OA 未登录 ↓ 跳转 auth.company.com ↓ 认证中心判断用户是否登录 ↓ 返回认证结果给 OA CRM 未登录 ↓ 跳转 auth.company.com ↓ 认证中心判断用户是否登录 ↓ 返回认证结果给 CRM

所以不是 OA 把登录态直接给 CRM。

而是:

所有系统都信任认证中心

这才是 SSO 的核心。


十、SSO 和 OAuth2 是什么关系?

SSO 是一种登录体验和系统架构目标。

OAuth2 是一种授权协议。

它们不是同一个东西。

但是在现代企业系统中,SSO 经常会基于 OAuth2 / OIDC 实现。

可以这样理解:

名称解决的问题
SSO登录一次,访问多个系统
OAuth2第三方授权流程
OIDC基于 OAuth2 的身份认证协议

更准确地说:

OAuth2 更偏授权,OIDC 更偏登录认证。

如果企业要实现现代化统一登录,一般会使用:

OAuth2 + OIDC

来完成身份认证和授权流程。

例如:

用户访问业务系统 ↓ 跳转认证中心 ↓ 认证中心完成登录 ↓ 返回 authorization code ↓ 业务系统换取 id_token / access_token ↓ 业务系统识别用户身份

这里的id_token通常用于表达用户身份。

这就是 OIDC 在 SSO 中的作用。


十一、SSO 和 JWT 是什么关系?

JWT 不是 SSO。

JWT 只是一种 Token 格式。

SSO 是一种登录体系。

但是 SSO 系统中可以使用 JWT。

例如:

认证中心登录成功后,可以签发:

id_token access_token refresh_token

这些 Token 可以是 JWT 格式。

业务系统拿到 JWT 后,可以解析用户身份。

所以关系是:

SSO 是体系 JWT 是 Token 格式 OAuth2 / OIDC 是协议流程

不要把它们混为一谈。


十二、SSO 和 Gateway 是什么关系?

Gateway 负责统一入口和统一鉴权。

SSO 负责统一登录。

它们的关系可以这样理解:

SSO:解决用户在哪里登录 Gateway:解决请求进入系统时怎么鉴权

在微服务架构里,常见流程是:

用户先通过 SSO 登录 ↓ 拿到 Token ↓ 请求业务接口 ↓ 请求进入 Gateway ↓ Gateway 校验 Token ↓ 转发到后端服务

所以 SSO 和 Gateway 是协同关系。

SSO 负责签发身份结果。

Gateway 负责在请求入口校验身份结果。


十三、SSO 和 Redis 是什么关系?

Redis 在 SSO 中常用来保存登录态、Token、会话信息。

例如:

sso:session:xxxx -> userId refresh:user:1001 -> refreshToken login:user:1001 -> loginStatus

Redis 的作用是:

统一管理会话 支持主动失效 支持踢下线 支持统一退出 支持多端控制

如果员工离职,管理员可以在认证中心禁用账号,并删除 Redis 中的会话信息。

这样所有系统都会失效。

这就是企业统一认证的价值。


十四、什么是统一退出?

SSO 不仅要支持统一登录,还要支持统一退出。

统一退出的目标是:

用户退出一次 所有系统都退出

例如用户登录了:

OA CRM ERP 财务系统

如果用户点击退出,理想情况是:

认证中心登录态失效 OA 登录态失效 CRM 登录态失效 ERP 登录态失效 财务系统登录态失效

这比单系统退出复杂得多。

因为每个业务系统可能都有自己的本地登录态。

所以企业系统里,统一退出通常会涉及:

认证中心 Session 失效 Token 黑名单 Redis 删除登录态 通知业务系统清理本地会话 前端清理本地 Token

所以 SSO 的难点不只是登录,还有退出和会话生命周期管理。


十五、SSO 的几种常见实现方式

企业中常见的 SSO 实现方式有几类。

1. 基于 Cookie 的 SSO

适合统一域名体系下的 Web 系统。

例如:

oa.company.com crm.company.com auth.company.com

优点是浏览器天然支持 Cookie。

缺点是跨端、APP、小程序场景不够友好。


2. 基于 Token 的 SSO

认证中心登录成功后,签发 Token。

业务系统通过 Token 识别用户。

适合:

前后端分离 APP 小程序 微服务

这种方式更符合现代应用架构。


3. 基于 OAuth2 / OIDC 的 SSO

这是现代企业系统中更标准的方式。

通过:

Authorization Code AccessToken RefreshToken IdToken

完成统一登录和身份传递。

很多企业身份平台、第三方登录、云服务登录都采用类似思路。


4. 基于 CAS 的 SSO

CAS 是比较经典的单点登录方案。

一些老系统、传统企业系统中还会看到。

它的核心也是:

统一认证中心 业务系统信任认证中心

只是协议和实现方式不同。


十六、企业统一身份认证平台怎么设计?

一个成熟的企业统一身份认证平台,通常会包含这些能力:

统一登录 统一退出 账号管理 组织架构 角色权限 Token 管理 第三方登录 应用接入管理 登录日志 安全风控

它不只是一个登录接口。

而是一个完整的身份平台。

业务系统接入认证中心后,不再自己维护登录逻辑。

而是统一走认证中心。

整体结构类似:

用户 ↓ 认证中心 Auth Center ↓ 应用 A:OA ↓ 应用 B:CRM ↓ 应用 C:ERP ↓ 应用 D:财务系统

认证中心负责身份。

业务系统负责业务。

这才是企业级系统更合理的分工。


十七、SSO 在这个系列中的位置

到这里,我们再把前面几篇串起来。

双 Token ↓ Token + Redis ↓ JWT ↓ Spring Security ↓ Gateway ↓ OAuth2 ↓ RBAC ↓ SSO

它们之间的关系是:

内容解决的问题
双 Token登录态续签
JWTToken 身份表达
Redis会话控制
Spring Security认证授权框架
Gateway微服务统一鉴权
OAuth2 / OIDC授权与统一身份协议
RBAC权限模型
SSO多系统统一登录

SSO 不是替代前面的内容。

它是在前面这些能力之上,解决企业多系统登录问题。


十八、面试怎么回答 SSO?

如果面试官问:

SSO 是什么?

可以这样回答:

SSO 是单点登录,核心目标是让用户只登录一次,就可以访问多个相互信任的业务系统。

它的本质是把登录能力从各个业务系统中抽离出来,交给统一认证中心。

业务系统不再自己处理账号密码登录,而是跳转到认证中心完成登录,然后根据认证中心返回的认证结果建立自己的登录态。

在现代企业系统中,SSO 通常会基于 OAuth2 / OIDC、JWT、Redis 等技术实现。

认证中心负责统一登录、Token 签发、会话管理、统一退出和账号禁用。

业务系统负责根据认证结果识别用户并处理业务逻辑。


十九、最终核心理解

SSO 解决的不是单个系统怎么登录。

它解决的是:

多个系统如何共用一套身份认证能力。

普通登录关注的是:

用户如何登录当前系统

SSO 关注的是:

用户登录一次 如何访问多个系统

它的核心是:

统一认证中心 业务系统信任认证中心 认证结果在多个系统之间传递

所以,SSO 是企业认证体系从“单系统登录”走向“多系统统一身份认证”的关键一步。

对于大型企业系统来说,SSO 不是锦上添花,而是基础能力。


下篇预告

下一篇我们继续:

《企业认证与安全体系(十):一张图看懂企业认证架构——从登录、鉴权到权限控制完整串联》

这是整个系列的收官篇。

我们将把前面九篇全部串起来:

双 Token Token + Redis JWT Spring Security Gateway OAuth2 RBAC SSO

最终形成一张完整的企业认证架构图。

真正回答:

企业里的登录认证体系到底是怎么设计的?