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 ]