天天看點

單點登入原理及其實作方案

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 ]