面試官:說(shuō)說(shuō)什么是單點(diǎn)登錄?什么是SSO?什么是CAS?

目錄

單點(diǎn)登錄簡(jiǎn)介

SSO&CAS是什么

單點(diǎn)登錄適合什么場(chǎng)景

單點(diǎn)登錄的三種實(shí)現(xiàn)方式

CAS的幾個(gè)重要知識(shí)點(diǎn)

CAS的實(shí)現(xiàn)過(guò)程

單點(diǎn)登錄簡(jiǎn)介

單點(diǎn)登錄(SingleSignOn,SSO),就是通過(guò)用戶的一次性鑒別登錄。當(dāng)用戶在身份認(rèn)證服務(wù)器上登錄一次以后,即可獲得訪問(wèn)單點(diǎn)登錄系統(tǒng)中其他關(guān)聯(lián)系統(tǒng)和應(yīng)用軟件的權(quán)限,同時(shí)這種實(shí)現(xiàn)是不需要管理員對(duì)用戶的登錄狀態(tài)或其他信息進(jìn)行修改的,這意味著在多個(gè)應(yīng)用系統(tǒng)中,用戶只需一次登錄就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。這種方式減少了由登錄產(chǎn)生的時(shí)間消耗,輔助了用戶管理,是目前比較流行的。

A.傳統(tǒng)登錄流程圖:



B.單點(diǎn)登錄流程圖:



SSO&CAS是什么

SSO

SSO是目前比較流行的服務(wù)于企業(yè)業(yè)務(wù)整合的解決方案之一, SSO 使得在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要 登錄一次 就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。



CAS

CAS 是 Yale 大學(xué)發(fā)起的一個(gè)企業(yè)級(jí)的、開(kāi)源的項(xiàng)目,旨在為 Web 應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登錄解決方法(SSO的一種框架)

CAS 包括兩部分:CAS Server 和 CAS Client

CAS Server:負(fù)責(zé)完成對(duì)用戶的認(rèn)證工作 , 需要獨(dú)立部署。

CAS Client:負(fù)責(zé)處理對(duì)客戶端受保護(hù)資源的訪問(wèn)請(qǐng)求,需要對(duì)請(qǐng)求方進(jìn)行身份認(rèn)證時(shí),重定向到 CAS Server 進(jìn)行認(rèn)證。

單點(diǎn)登錄適合什么場(chǎng)景

拿新浪舉個(gè)單點(diǎn)登錄的例子



新浪微博與新浪博客是相互信任的應(yīng)用系統(tǒng):

當(dāng)用戶首次訪問(wèn)新浪微博時(shí),新浪微博識(shí)別到用戶未登錄,將請(qǐng)求重定向到認(rèn)證中心,認(rèn)證中心也識(shí)別到用戶未登錄,則將請(qǐng)求重定向到登錄頁(yè)。

當(dāng)用戶已登錄新浪微博訪問(wèn)新浪博客時(shí),新浪博客識(shí)別到用戶未登錄,將請(qǐng)求重定向到認(rèn)證中心,認(rèn)證中心識(shí)別到用戶已登錄,返回用戶的身份,此時(shí)用戶無(wú)需登錄即可使用新浪博客。

只要多個(gè)系統(tǒng)使用同一套單點(diǎn)登錄框架那么它們將是相互信任的。

單點(diǎn)登錄的三種實(shí)現(xiàn)方式

1.同域SSO






沒(méi)有設(shè)置獨(dú)立的 SSO 服務(wù)器,因?yàn)闃I(yè)務(wù)后臺(tái)服務(wù)器本身就足以承擔(dān) SSO 的職能。

2.同父域SSO

和同域SSO不同在于,服務(wù)器在返回 cookie 的時(shí)候,要把cookie 的 domain 設(shè)置為其父域。

3.跨域SSO(CAS)

設(shè)置專門SSO服務(wù)器,當(dāng)兩個(gè)產(chǎn)品不同域時(shí),cookie無(wú)法共享,從而我們就需要搭建SSO服務(wù)器。

CAS的幾個(gè)重要知識(shí)點(diǎn)

接口:

/login:登錄接口,用于登錄到中心服務(wù)器。

/logout:登出接口,用于從中心服務(wù)器登出。

票據(jù)

1. TGT (Ticket Grangting Ticket) :

TGT 是 CAS 為用戶簽發(fā)的登錄票據(jù),擁有了 TGT,用戶就可以證明自己在 CAS 成功登錄過(guò)。TGT 封裝了 Cookie 值以及此 Cookie 值對(duì)應(yīng)的用戶信息。

2.TGC(Ticket Granting Cookie) :

CAS Server 生成TGT放入自己的 Session 中,而 TGC 就是這個(gè) Session 的唯一標(biāo)識(shí)(SessionId),以 Cookie 形式放到瀏覽器端。

3.ST(Service Ticket) :

ST 是 CAS 為用戶簽發(fā)的訪問(wèn)某一 service 的票據(jù)。用戶訪問(wèn) service 時(shí),service 發(fā)現(xiàn)用戶沒(méi)有 ST,則要求用戶去 CAS 獲取 ST。



CAS的實(shí)現(xiàn)過(guò)程

跨域SSO(CAS)實(shí)現(xiàn)過(guò)程

用戶訪問(wèn)產(chǎn)品 a,域名是 www.a.cn。

由于用戶沒(méi)有攜帶在 a 服務(wù)器上登錄的 a cookie,所以 a 服務(wù)器重定向到SSO 服務(wù)器的地址。

由于用戶沒(méi)有攜帶在 SSO 服務(wù)器上登錄的 TGC,所以 SSO 服務(wù)器判斷用戶未登錄,給用戶顯示統(tǒng)一登錄界面。

登錄成功后,SSO 服務(wù)器構(gòu)建用戶在 SSO 登錄的 TGT,同時(shí)返回一個(gè) http 重定向(包含 sso 服務(wù)器派發(fā)的 ST )。

重定向的 http response 中包含寫(xiě) cookie。這個(gè) cookie 代表用戶在 SSO 中的登錄狀態(tài),它的值是 TGC。

瀏覽器重定向到產(chǎn)品 a。此時(shí)重定向的 url 中攜帶著 SSO 服務(wù)器生成的 ST。根據(jù) ST,a 服務(wù)器向 SSO 服務(wù)器發(fā)送請(qǐng)求,SSO 服務(wù)器驗(yàn)證票據(jù)的有效性。驗(yàn)證成功后,a 服務(wù)器知道用戶已經(jīng)在 sso 登錄了,于是 a 服務(wù)器構(gòu)建用戶登錄 session。

用戶訪問(wèn)產(chǎn)品 b,域名是 www.b.cn。

由于用戶沒(méi)有攜帶在 b 服務(wù)器上登錄的 b cookie,所以 b 服務(wù)器重定向到SSO 服務(wù)器,去詢問(wèn)用戶在 SSO 中的登錄狀態(tài)。

瀏覽器重定向到 SSO服務(wù)器。由于已經(jīng)向?yàn)g覽器寫(xiě)入了攜帶 TGC 的cookie,所以此時(shí) SSO 服務(wù)器可以拿到,根據(jù) TGC 去查找 TGT,如果找到,就判斷用戶已經(jīng)在 sso 登錄過(guò)了。

SSO 服務(wù)器返回一個(gè)重定向,重定向攜帶 ST。

瀏覽器帶 ST 重定向到 b 服務(wù)器。

b 服務(wù)器根據(jù)票據(jù)向 SSO 服務(wù)器發(fā)送請(qǐng)求,票據(jù)驗(yàn)證通過(guò)后,b 服務(wù)器知道用戶已經(jīng)在 sso 登錄了,于是生成 b session,向?yàn)g覽器寫(xiě)入 b cookie。







作者:碼出宇宙

歡迎關(guān)注微信公眾號(hào) :碼出宇宙

掃描添加好友邀你進(jìn)技術(shù)交流群,加我時(shí)注明【姓名+公司(學(xué)校)+職位】