學(xué)習(xí)完整課程請移步 互聯(lián)網(wǎng) Java 全棧工程師
本節(jié)視頻
什么是單點登錄
什么是單點登錄?單點登錄全稱 Single Sign On(以下簡稱 SSO),是指在多系統(tǒng)應(yīng)用群中登錄一個系統(tǒng),便可在其他所有系統(tǒng)中得到授權(quán)而無需再次登錄,包括單點登錄與單點注銷兩部分
單點登錄
相比于單系統(tǒng)登錄,sso 需要一個獨立的認(rèn)證中心,只有認(rèn)證中心能接受用戶的用戶名密碼等安全信息,其他系統(tǒng)不提供登錄入口,只接受認(rèn)證中心的間接授權(quán)。間接授權(quán)通過令牌實現(xiàn),sso 認(rèn)證中心驗證用戶的用戶名密碼沒問題,創(chuàng)建授權(quán)令牌,在接下來的跳轉(zhuǎn)過程中,授權(quán)令牌作為參數(shù)發(fā)送給各個子系統(tǒng),子系統(tǒng)拿到令牌,即得到了授權(quán),可以借此創(chuàng)建局部會話,局部會話登錄方式與單系統(tǒng)的登錄方式相同。這個過程,也就是單點登錄的原理,用下圖說明

下面對上圖簡要描述
- 用戶訪問系統(tǒng) 1 的受保護(hù)資源,系統(tǒng)1發(fā)現(xiàn)用戶未登錄,跳轉(zhuǎn)至
sso認(rèn)證中心,并將自己的地址作為參數(shù) -
sso認(rèn)證中心發(fā)現(xiàn)用戶未登錄,將用戶引導(dǎo)至登錄頁面 - 用戶輸入用戶名密碼提交登錄申請
-
sso認(rèn)證中心校驗用戶信息,創(chuàng)建用戶與sso認(rèn)證中心之間的會話,稱為全局會話,同時創(chuàng)建授權(quán)令牌 -
sso認(rèn)證中心帶著令牌跳轉(zhuǎn)會最初的請求地址(系統(tǒng)1) - 系統(tǒng)1拿到令牌,去
sso認(rèn)證中心校驗令牌是否有效 -
sso認(rèn)證中心校驗令牌,返回有效,注冊系統(tǒng) 1 - 系統(tǒng) 1 使用該令牌創(chuàng)建與用戶的會話,稱為局部會話,返回受保護(hù)資源
- 用戶訪問系統(tǒng) 2 的受保護(hù)資源
- 系統(tǒng)2發(fā)現(xiàn)用戶未登錄,跳轉(zhuǎn)至
sso認(rèn)證中心,并將自己的地址作為參數(shù) -
sso認(rèn)證中心發(fā)現(xiàn)用戶已登錄,跳轉(zhuǎn)回系統(tǒng) 2 的地址,并附上令牌 - 系統(tǒng) 2 拿到令牌,去
sso認(rèn)證中心校驗令牌是否有效 -
sso認(rèn)證中心校驗令牌,返回有效,注冊系統(tǒng) 2 - 系統(tǒng) 2 使用該令牌創(chuàng)建與用戶的局部會話,返回受保護(hù)資源
用戶登錄成功之后,會與 sso 認(rèn)證中心及各個子系統(tǒng)建立會話,用戶與 sso 認(rèn)證中心建立的會話稱為全局會話,用戶與各個子系統(tǒng)建立的會話稱為局部會話,局部會話建立之后,用戶訪問子系統(tǒng)受保護(hù)資源將不再通過 sso 認(rèn)證中心,全局會話與局部會話有如下約束關(guān)系
- 局部會話存在,全局會話一定存在
- 全局會話存在,局部會話不一定存在
- 全局會話銷毀,局部會話必須銷毀
單點注銷
單點登錄自然也要單點注銷,在一個子系統(tǒng)中注銷,所有子系統(tǒng)的會話都將被銷毀,用下面的圖來說明

sso 認(rèn)證中心一直監(jiān)聽全局會話的狀態(tài),一旦全局會話銷毀,監(jiān)聽器將通知所有注冊系統(tǒng)執(zhí)行注銷操作
- 用戶向系統(tǒng) 1 發(fā)起注銷請求
- 系統(tǒng)1根據(jù)用戶與系統(tǒng)1建立的會話
id拿到令牌,向sso認(rèn)證中心發(fā)起注銷請求 -
sso認(rèn)證中心校驗令牌有效,銷毀全局會話,同時取出所有用此令牌注冊的系統(tǒng)地址 -
sso認(rèn)證中心向所有注冊系統(tǒng)發(fā)起注銷請求 - 各注冊系統(tǒng)接收
sso認(rèn)證中心的注銷請求,銷毀局部會話 -
sso認(rèn)證中心引導(dǎo)用戶至登錄頁面