CAS實現單點登陸SSO執行原理探究

一、登陸信息傳遞瀏覽器


1.用戶首次登陸時流程以下:

1)、用戶瀏覽器訪問系統A需登陸受限資源,此時進行登陸檢查,發現未登陸,而後進行獲取票據操做,發現沒有票據。cdn

2)、系統A發現該請求須要登陸,將請求重定向到認證中心,獲取全局票據操做,沒有,進行登陸。blog

3)、認證中心呈現登陸頁面,用戶登陸,登陸成功後,認證中心重定向請求到系統A,並附上認證經過令牌,此時認證中心同時生成了全局票據。資源

4)、此時再次進行登陸檢查,發現未登陸,而後再次獲取票據操做,此時能夠得到票據(令牌),系統A與認證中心通訊,驗證令牌有效,證實用戶已登陸。it

5)、系統A將受限資源返給用戶。
2.已登陸用戶首次訪問應用羣中系統B時:io

1)、瀏覽器訪問另外一應用B需登陸受限資源,此時進行登陸檢查,發現未登陸,而後進行獲取票據操做,發現沒有票據。class

2)、系統B發現該請求須要登陸,將請求重定向到認證中心,獲取全局票據操做,獲取全局票據,能夠得到,認證中心發現已經登陸。效率

3)、認證中心發放臨時票據(令牌),並攜帶該令牌重定向到系統B。登錄

4)、此時再次進行登陸檢查,發現未登陸,而後再次獲取票據操做,此時能夠得到票據(令牌),系統B與認證中心通訊,驗證令牌有效,證實用戶已登陸。lazyload

5)、系統B將受限資源返回給客戶端。


二、登陸狀態判斷

用戶到認證中心登陸後,用戶和認證中心之間創建起了會話,咱們把這個會話稱爲全局會話。當用戶後續訪問系統應用時,咱們不可能每次應用請求都到認證中心去斷定是否登陸,這樣效率很是低下,這也是單Web應用不須要考慮的。

咱們能夠在系統應用和用戶瀏覽器之間創建起局部會話,局部會話保持了客戶端與該系統應用的登陸狀態,局部會話依附於全局會話存在,全局會話消失,局部會話必須消失。

用戶訪問應用時,首先判斷局部會話是否存在,如存在,即認爲是登陸狀態,無需再到認證中心去判斷。如不存在,就重定向到認證中心判斷全局會話是否存在,如存在,按1提到的方式通知該應用,該應用與客戶端就創建起它們之間局部會話,下次請求該應用,就不去認證中心驗證了。

用戶在一個系統登出了,訪問其它子系統,也應該是登出狀態。要想作到這一點,應用除結束本地局部會話外,還應該通知認證中心該用戶登出。

認證中心接到登出通知,便可結束全局會話,同時須要通知全部已創建局部會話的子系統,將它們的局部會話銷燬。這樣,用戶訪問其它應用時,都顯示已登出狀態。

整個登出流程以下:

1)、客戶端嚮應用A發送登出Logout請求。2)、應用A取消本地會話,同時通知認證中心,用戶已登出。3)、應用A返回客戶端登出請求。4)、認證中心通知全部用戶登陸訪問的應用,用戶已登出。

相關文章
相關標籤/搜索