1. 程式人生 > 其它 >單點登入的三種常用實現方式

單點登入的三種常用實現方式

基礎知識:

單點登入:
在微服務或者分散式情況下,我們的伺服器不止一個需要使用者在一個JVM上執行登入邏輯以後,其他的伺服器JVM都認可已經登入的身份,這就是--->單點登入。

session原理(存放在在伺服器端,每次請求會重置時間)

當客戶端傳送一個請求的時候伺服器端會判斷是否有一個名為jsesion的cookie
如果沒有,服務端就會建立一個名為jsession的cookie,cookie的值為uuid,同時會建立一個uuid為key的session被創建出來,同時會把名為jsession的cookie返回到客戶端
如果客戶端存在cookie且沒有超時,再次請求的時候就直接會將名為jsession的cookie返回到請求頭中.

cookie原理(存放在客戶端,每次請求不會重置時間)
客戶在一個專案中登入之後其他與之有關聯的專案就不需要再進行重複登入

1.利用session廣播機制實現

參與叢集的每個節點的Session狀態都被複制到叢集中的其他所有節點上,無論何時,只要Session發生改變,Session資料都要重新被複制
Tomcat、JBoss、was都提供了這樣的功能,其中Tomcat採用叢集節點廣播複製,JBoss採用配對複製機制
優點:每個節點都複製一份Session,一個節點出現問題時其它節點可以接替它的工作
缺點:節點間進行Session同步會佔據不少系統資源,整體效能隨著叢集節點數的增加而急劇下降

2.使用cookie+redis實現

(1)客戶端第一次登陸時,通過服務端產生cookie和一個與之對相應的session
(2)將第一次登入產生的cookie和User物件(登入所需資訊),以key-value的形式儲存在Redis中
(3)當客戶端再次訪問另外需要登入操作的頁面時,將該客戶端的cookie拿到Redis中進行比對,如果存在,則視為已登入
(4)因為session是存在有效期的,所以可以在Redis中設定與之對相應的有效時間

3.使用token實現

(1)構SSO服務站點
(2)客戶端第一次登入時在SSO站點獲取登陸憑證
(3)客戶端拿著登陸憑證去服務端登入
(4)服務端拿著客戶端的登陸憑證去尋找SSO服務站點進行校驗
(5)SSO校驗成功並通知服務端該客戶一登入,可以進行下一步操作

所謂迷茫,就是清醒的看著自己沉淪。 不過總會遇到那束光,或早,或晚。