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个系统,但一级域名一致; 这个案例实现相对简单
单点登录原理及其实现方案_社会时事_02

该方案比较简单,只要提供公共的SDK 即可,无需第三个系统的出现,SDK需要管理Cookie 和用户信息。

原理

其实质这里就是利用了[ 二级域名 ]写[ 一级域名 ]的[ Cookie ].

优点

轻量级、可插拔、效率非常高

缺点

局限性限于一级域名是一样的

2.2 方案二

域名

www.sojson.com、a.sojson.com、www.itboy.net、www.wenyiba.com

描述

域名较乱,有同一级域名,也有不同域名
单点登录原理及其实现方案_社会时事_03

原理

通过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),也有不同域名
(条件和方案二一样),实现思路如下图:
单点登录原理及其实现方案_社会时事_04

原理

所有的请求(登录、退出、获取用户信息、当前用户状态)都请求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 ]

原理

和方案三类似。

优点

现成的,资料较多。

缺点

繁重、灵活性差。