天天看点

单点登录原理及其实现方案

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 ]