嘿,大家好,我是侯哥 ☕。
有没有遇到过这种情况:你登录了公司的邮箱系统,结果切到OA(办公系统)又要登录一遍;再打开CRM(客户系统),还得重新输账号密码……
你一边翻着密码管理器,一边心想:“为啥都是我自己的系统,还要重复登录这么多次?”
别急,这正是“单点登录”(Single Sign-On,简称 SSO)要解决的问题。今天学长就带你用最通俗的方式,搞懂 SSO 到底是什么、怎么做、有哪些坑要注意。
☕ 一、什么是单点登录(SSO)
一句话解释:
用户只需登录一次,就能访问多个相互信任的系统。
就像你进了一家公司的大楼,只要在前台刷了一次门禁卡,整栋楼的会议室、茶水间、办公室都能自由出入,不用每扇门都再刷一次卡。
而没有 SSO 的情况,就像每间办公室都要单独登记——麻烦又低效。
🧩 二、为什么要用单点登录
在企业里,我们常常有多个系统:
OA 办公系统邮件系统项目管理系统CRM 销售系统BI 数据分析系统
如果每个系统都独立登录,那就会有以下问题:
用户体验差:一天下来登录好几遍,烦!账号体系割裂:用户信息重复,维护麻烦。安全隐患大:密码多、系统多,风险也多。
而引入 SSO 后,只要登录一次认证中心,后续访问其他系统都自动带上凭证,体验统一、安全性更高、开发维护更简单。
⚙️ 三、单点登录的工作原理
别担心,虽然名字听起来高大上,其实原理不复杂。我们用一个场景打比方👇
假设公司有两个系统:
A 系统:OA 系统B 系统:CRM 系统还有一个统一认证中心(SSO Server)
流程如下👇
1️⃣ 用户访问 A 系统,发现自己还没登录。2️⃣ A 系统把用户重定向到 SSO 认证中心。3️⃣ 用户在认证中心输入账号密码,通过验证后,SSO 生成一个登录令牌(Token),并记录登录状态。4️⃣ 认证中心把 Token 返回给 A 系统,A 系统保存用户登录态(通常在 Cookie 或 Session 中)。5️⃣ 用户再访问 B 系统 时,B 系统也会跳转到 SSO。6️⃣ SSO 看到用户已经登录,就直接发一个新的 Token 给 B 系统,无需再次输入密码。
结果:用户只登录一次,就能畅行多个系统。
🧠 四、SSO 实现的常见方式
1️⃣基于 Cookie 的 SSO(同域名下)
比如:
主域:company.com系统 A:oa.company.com系统 B:crm.company.com
可以把登录信息写在主域 Cookie(company.com),这样子域都能共享,简单又高效。
适合场景: 内部系统、统一域名管理。缺点: 不适用于跨域(不同二级域名或不同公司系统)。
2️⃣基于 Token 的 SSO(跨域场景)
常见协议:
OAuth2.0 / OpenID ConnectSAML 2.0
核心思想:SSO Server 发放一个访问令牌(Access Token 或 ID Token),各系统拿到后可以验证用户身份,而不用重复登录。
就像“你去不同的部门办事,出示同一个公司工牌”,大家都能认得你是谁。
常见产品:
KeycloakAuth0OktaCAS自研认证中心(基于 Spring Security OAuth2、JWT 实现)
🧱 五、一个简化版的 SSO 实战流程(JWT 实现思路)
用户在认证中心 /login 登录成功,生成一个 JWT:
认证中心在浏览器中写入 Cookie 或重定向到业务系统,携带 Token。各系统接收到 Token 后,通过公钥验证签名,确认 Token 真实有效。系统根据 Token 内的信息建立本地登录态。
优点:
无需共享 Session扩展性强(适合微服务)易与 API 网关、前后端分离项目集成
💣 六、单点登录的“隐藏副本”问题
学长见过不少坑,给大家提前踩好👇
⚠️ 1. 登录状态不同步
用户登出 A 系统,B 系统还保持登录状态。→ 需要让认证中心通知所有子系统统一登出(单点登出 SLO)。
⚠️ 2. Token 泄露
Token 一旦被截获,别人就能伪装登录。→ 一定要用 HTTPS;Token 设置合理过期时间;敏感操作二次校验。
⚠️ 3. 缓存与过期策略混乱
多个系统缓存不同步,导致登录状态不同步。→ 建议使用 Redis 统一存储登录状态。
🔒 七、SSO 不是登录技术,而是信任体系
很多人以为 SSO 就是“搞个统一登录页面”,其实远不止如此。它更像是一种系统间的信任传递机制——让不同系统都能相信:“你是谁”,而且这份身份是可靠的。
这涉及:
安全令牌(Token)签名验证(Public/Private Key)超时机制信任关系(Who trusts who)
☕ 总结
SSO 的核心价值在于统一登录体验与安全信任传递。它的目标不是“省登录”,而是:
提升用户体验降低系统重复开发成本强化认证安全与可管控性
一次登陆,全系统通行。一份信任,全平台协作。
💬学长提问:你们公司的系统是怎么做登录的?是各自为政,还是已经接入了统一登录?如果你打算自己实现一个轻量版的 SSO,最想解决哪个问题?
—— 来自代码学长咖啡馆 ☕,侯哥