单点登录核心详解(架构+原理+流程)

单点登录是大型架构必备,下面我详解单点登录核心@mikechen

单点登录

单点登录(Single Sign-On,简称 SSO),是一种身份认证过程,允许用户在多个相互独立的软件系统中。

只需登录一次,就可以访问所有相互信任的应用系统。

比如:你有淘宝、天猫、支付宝、钉钉等多个阿里系产品。

单点登录核心详解(架构+原理+流程)-mikechen

传统方式:你需要为每个App/网站单独登录一次,非常麻烦。

SSO 方式:你在任意一个产品(如淘宝)登录成功后。

访问天猫、支付宝、钉钉时自动就已经登录,无需再次输入密码。

一句话总结:一次登录,处处通行。

 

单点登录架构

一个标准 SSO 架构,通常包含以下角色:

单点登录核心详解(架构+原理+流程)-mikechen

   ┌────────────┐
   │  Browser   │
   └─────┬──────┘
         │
未登录访问系统A
         │
   ┌─────▼──────┐
   │  System A  │  CAS Client
   └─────┬──────┘
         │ Redirect
   ┌─────▼──────┐
   │ CAS Server │  认证中心
   └─────┬──────┘
         │
   ┌─────▼──────┐
   │  System B  │  CAS Client
   └────────────┘
​

CAS服务器(Authentication Server)

核心认证模块:处理用户名/密码、二次校验(如OTP、短信、MFA)。

票据管理:生成、保存、失效票据(TGT、ST)。

协议支持:CAS协议(v1/v2/v3)、SAML、OAuth2/OpenID Connect(部分实现兼容)。

单点登出协调:维护会话关联并向客户端发送登出通知。

服务提供方(Service Providers / Clients)

重定向逻辑:在未登录时重定向到CAS登录页。

票据验证器:调用CAS验证接口以换取用户信息或断言(Assertion)。

本地会话管理:根据验证结果建立本地会话和权限映射。

浏览器:

在不同业务域名之间跳转,但通过 CAS Server 的 Cookie 保持统一登录态。

辅助组件

反向代理/负载均衡:实现高可用与流量分发。

日志与审计:记录认证事件与异常。

缓存与会话存储:提高性能(如Redis存储票据或会话映射)。

MFA/SSO扩展服务:增强安全性与兼容性。

 

单点登录流程

证流程分为前台跳转和后台验证两部分:

单点登录核心详解(架构+原理+流程)-mikechen

访问应用 A:用户尝试访问 appA.com,应用 A 发现本地没有 Session,拦截请求。

重定向至 CAS:应用 A 将浏览器重定向到 cas.com/login?service=appA.com

用户登录:用户在 CAS 登录页输入账号密码。

创建凭证:CAS Server 验证成功后,在服务器生成 TGT。

携带 ST 回跳:CAS 生成一个随机的 ST,重定向回 appA.com?ticket=ST-xxxx

后台验证 ST:应用 A 拿到 ST 后,在后台(Server-to-Server)请求 CAS Server 验证该 ST 是否合法。

建立局部会话:验证通过,应用 A 创建自己的局部 Session,用户访问成功。

mikechen睿哥

10年+一线大厂架构实战经验,操盘多个亿级大厂核心项目,就职于阿里、淘宝等一线大厂。

评论交流
    说说你的看法