单点登录(SSO)

发布于 2023-01-01  172 次阅读


Single Sign On 一处登陆、处处可用

一、前置概念

1、单点登录业务介绍

1、早期单一服务器,用户认证。

缺点:单点性能压力,无法扩展

分布式,SSO(single sign on)模式

缺点:单点性能压力,无法扩展

2、分布式,SSO(single sign on)模式

核心:

所有的认证操作都在认证中心实现,通过认证中心实现了信息的共享

解决 :

用户身份信息独立管理,更好的分布式管理。

可以自己扩展安全策略

跨域不是问题

缺点:

认证服务器访问压力较大。

二、相关基本概念

1、跨域 Web SSO

域名通过“.”号切分后,从右往左看,不包含“.”的是顶级域名,包含一个“.”的是一级域名,

包含两个“.”的是二级域名,以此类推。

例如对网址 http://123.57.56.245:8080/archives/1672410496522, 域名部分是 www.ctcnb.cn

用“.”拆分后从右往左看:

cookie.setDomain(“.ctcnb.cn”);//最多设置到本域的一级域名这里

”com”不包含“.”,是顶级域名; “ctcnb.cn”包含一个“.”,是一级域名;

www.ctcnb.cn 包含两个“.”,是二级域名。

跨域 Web SSO 指的是针对 Web 站点,各级域名不同都能处理的单点登录方案。

2、浏览器读写 cookie 的安全性限制

一级或顶级域名不同的网站,无法读到彼此写的 cookie。

所以 baidu.com 无法读到 cnblogs.com 写的 cookie。

一级域名相同,只是二级或更高级域名不同的站点,可以通过设置 domain 参数共享 cookie读写。这种场景可以选择不跨域的 SSO 方案。

域名相同,只是 https 和 http 协议不同的 URL,默认 cookie 可以共享。

3、http 协议是无状态协议。

浏览器访问服务器时,要让服务器知道你是谁,只有两种方式:

  • 方式一:把“你是谁”写入 cookie。它会随每次 HTTP 请求带到服务端;
  • 方式二:在 URL、表单数据中带上你的用户信息(也可能在 HTTP 头部)。这种方式依赖于从特定的网页入口进入,因为只有走特定的入口,才有机会拼装出相应的信息,提交到服务端。

大部分 SSO 需求都希望不依赖特定的网页入口(集成门户除外),所以后一种方式有局限性。适应性强的方式是第一种,即在浏览器通过 cookie 保存用户信息相关凭据,随每次请求传递到服务端。

三、实现

1、分布式session

2、Cookie+Redis

gulimall实现:

核心:

  1. 给登服务器留下登录痕迹
  2. 登绿服务器要将token信息重定向的时候,带到ur地址上
  3. 其他系统要处理url地址上的关键token,只要有,将token对应的用户保存到自己的session中
  4. 自己系统将用户保存在自己的会话中。

3、Token接入方式

类似社交登录