分布式是大型架构基石,下面我详解单点登录系统原理@mikechen
单点登录系统
单点登录(Single Sign-On, SSO),允许用户在一次身份验证,后访问多个受信任的应用系统而无需重复登录。

这大大提升了用户体验,同时简化了身份管理,尤其适用于分布式系统、或多应用环境。
单点登录系统原理
单点登录其本质是:身份认证集中化(只在 SSO Server 做一次)。
认证结果可被多个业务系统信任与复用,关键不在“登录”,而在 “认证态的跨系统传递与校验”。
整体架构,如下图所示:

┌──────────┐
│ Browser │
└────┬─────┘
│
▼
┌────────────┐ ┌────────────────┐
│ Client A │◄──────►│ SSO Server │
│ Client B │ │ (认证中心) │
│ Client C │ └────────────────┘
└────────────┘
1️⃣ CAS Server(认证中心)
唯一负责“身份认证”的系统。
核心职责:
用户名 / 密码校验;
维护全局登录态(TGT);
签发服务票据(ST);
统一登出协调中心。
2️⃣ CAS Client(业务系统)
不做登录,只做“票据校验”。
核心职责:
拦截未登录请求;
重定向用户到 CAS Server;
3️⃣ 浏览器(Browser)
票据和跳转的载体,核心职责:
保存 Cookie(TGC);
负责 302 重定向;
在系统之间传递 Ticket。
单点登录系统流程
整体流程,如下:

首先,访问受限资源。
用户通过浏览器访问 Client A,Client A 发现用户没登录(无 Local Session)。
重定向至 Server:Client A 返回 302,让浏览器跳转到 CAS Server。
身份认证:CAS Server 检查发现浏览器没有 TGC(Cookie),于是弹出登录页面。用户输入账号密码。
发放票据 (ST):Server 生成一个临时票据 ST (Service Ticket)。
票据校验:Client A 拿到 ST 后,在后台(不经过浏览器)向 CAS Server 发起校验请求。
返回结果:Server 确认 ST 合法,返回用户信息。
Client A 为用户创建局部 Session,登录完成。
mikechen睿哥
10年+一线大厂架构实战经验,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。