1. 程式人生 > >CAS框架單點登入原理解析

CAS框架單點登入原理解析

單點登入:Single Sign On,簡稱SSO,SSO使得在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。

CAS框架:CAS(Central Authentication Service)是實現SSO單點登入的框架。

這裡寫圖片描述

CSA中包括三個:A系統,B系統,CAS認證中心
使用者首次登入時流程如下:
1)、使用者瀏覽器訪問系統A需登入受限資源,此時進行登入檢查,發現未登入,然後進行獲取票據操作,發現沒有票據。
2)、系統A發現該請求需要登入,將請求重定向到認證中心,獲取全域性票據操作,沒有,進行登入。
3)、認證中心呈現登入頁面,使用者登入,登入成功後,認證中心重定向請求到系統A,並附上認證通過令牌,此時認證中心同時生成了全域性票據。
4)、此時再次進行登入檢查,發現未登入,然後再次獲取票據操作,此時可以獲得票據(令牌),系統A與認證中心通訊,驗證令牌有效,證明使用者已登入。
5)、系統A將受限資源返給使用者

已登入使用者首次訪問應用群中系統B時:
1)、瀏覽器訪問另一應用B需登入受限資源,此時進行登入檢查,發現未登入,然後進行獲取票據操作,發現沒有票據。
2)、系統B發現該請求需要登入,將請求重定向到認證中心,獲取全域性票據操作,獲取全域性票據,可以獲得,認證中心發現已經登入。
3)、認證中心發放臨時票據(令牌),並攜帶該令牌重定向到系統B。
4)、此時再次進行登入檢查,發現未登入,然後再次獲取票據操作,此時可以獲得票據(令牌),系統B與認證中心通訊,驗證令牌有效,證明使用者已登入。
5)、系統B將受限資源返回給客戶端。

注意:
系統A通過位址列獲取ticket的引數值ST票據,然後從後臺將ST傳送給CAS server認證中心驗證,驗證ST有效後,CAS server返回當前使用者登入的相關資訊,系統A接收到返回的使用者資訊,併為該使用者建立session會話,會話id由cookie維護,來證明其已登入。

在系統A登入成功後,使用者和認證中心之間建立起了全域性會話,這個全域性會話就是TGT(Ticket Granting Ticket),TGT位於CAS伺服器端,TGT並沒有放在Session中,也就是說,CAS全域性會話的實現並沒有直接使用Session機制,而是利用了Cookie自己實現的,這個Cookie叫做TGC(Ticket Granting Cookie),它存放了TGT的id,儲存在使用者瀏覽器上。

使用者傳送登入系統B的請求,首先會去Cookie中拿JSESSION,因為系統B並未登入過,session會話還未建立,JSESSION的值是拿不到的,然後將請求重定向到CAS認證中心,CAS認證中心先去使用者瀏覽器中拿TGC的值,也就是全域性會話id,如果存在則代表使用者在認證中心已經登入,附帶上認證令牌重定向到系統B。

這三點總結中全域性會話指的是瀏覽器cookie中的TGC的id與認證中心的會話;區域性會話指的是每次認證中心認證成功後,瀏覽器與A系統,瀏覽器與B系統之間的會話,會話id儲存在瀏覽器。