1 定义
单点登录(Single sign-on,简称 SSO),一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。
当拥有该属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。所以你会看到很多域名直接是
sso.domain.com
,也就是用来做 单点登录
。
这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。
相同的,单一退出(single sign-off)就是指,只需要单一的退出动作,就可以结束对于多个系统的访问权限。
- 一个用户请求N个系统,给用户的感觉是一个系统的感觉,而无需重复登录。
2 实现
根据不同的业务场景来采取不同的实现方式
2.1 方案一
- 域名
a.javaedge.com 、b.javaedge.com、c.javaedge.com、n.javaedge.com
描述
N个系统,但一级域名一致; 这个案例实现相对简单
该方案比较简单,只要提供公共的SDK 即可,无需第三个系统的出现,SDK需要管理Cookie 和用户信息。
原理
其实质这里就是利用了[ 二级域名 ]写[ 一级域名 ]的[ Cookie ].
优点
轻量级、可插拔、效率非常高
缺点
局限性限于一级域名是一样的
2.2 方案二
www.sojson.com、a.sojson.com、www.itboy.net、www.wenyiba.com
域名较乱,有同一级域名,也有不同域名
通过
SSO
系统(登录、退出),[ Iframe ]引用的方式引入
Cookie.domain.com
;
利用[Javascript ]操作(写入 / 删除 / 修改) [ cookie ];
而这个
cookie.domain.com
域名放入[ CDN ]上 ,获取用户信息当前系统直接通过[ Redis ](只读)获取
采用压力分化,
Cookie.domain.com
部署在CDN上;
这样的话,对各个系统造成的压力是 0 ;
用第三方系统(SSO)维护,权限更大,操作性更强;
Cookie
信息在当前域名的一级域下,获取简单,大量减少对[ sso ]的访问量
如果浏览器安全性过高,
Iframe
的方式操作[ Cookie ]将会失败。比如
IE
浏览器,目前正在攻克
IE
浏览器。
2.3 方案三
www.sojson.com、a.sojson.com、www.itboy.net、www.wenyiba.com
域名比较乱,有同
一级域名
(
www.sojson.com、a.sojson.com
),也有不同域名
(条件和方案二一样),实现思路如下图:
所有的请求(登录、退出、获取用户信息、当前用户状态)都请求
sso
系统,
sso
系统维护用户信息, Session ,
UserInfo
实现较为简单
SSO
压力非常大
2.4 方案四
www.java.com、a.java.com、www.itboy.net、www.wenyiba.com
域名比较乱,有同一个一级域名的(
www.java.com、a.java.com
),也有不同域名的。
(条件和方案二一样),实现采用[ CAS ]