更新時間:2022-08-18 10:13:26 來源:動力節點 瀏覽724次
SSO英文全稱Single Sign On,單點登錄。SSO是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。CAS是一種基于http協議的B/S應用系統單點登錄實現方案,認識CAS之前首先要熟悉http協議、Session與Cookie等Web開發基本知識。
HTTP是一個客戶端和服務器端請求和應答的標準,我們全后端開發對接的Rest接口就是基于http協議。http協議包含http請求消息(HttpRequest)和http應答消息(HttpResponse)兩部分。
理解http協議是無狀態協議的含義
熟記常見的http協議狀態碼,其中302等與cas相關
熟記常見的http請求頭,其中Cookie等與cas相關
熟記常見的http應答頭,其中Set-Cookie、Location等與cas相關
http協議本身是無狀態的,但有時候我們需要http請求保持狀態,我們引入Session與Cookie。
Session用在服務端,用于存儲當前所有客戶端需要保持的狀態值,并為每一個客戶端生成一個唯一編碼,然后通過http響應頭Set-Cookie將這個編碼發送給客戶端。
Cookie用在客戶端,用于記錄后端發來過的唯一編碼,該編碼與服務端上的對應的狀態值對應,在下一次請求的時候通過http請求頭Cookie帶上這個編碼,服務端就能根據這個編碼獲取該客戶端之前記錄的所有狀態值。
登錄成功后,在Session中寫入登錄用戶的信息,退出時清空Session中的用戶信息??梢酝ㄟ^filter實現。
(1)首次訪問(訪問第一個應用系統App1)
CAS首次登錄會經過兩次前端跳轉、一次后端驗證。在應用系統端需要集成CasClient的jar包,把其中的filter配置到站點web.xml中,用于攔截請求、判斷登錄、發起跳轉或發起驗證等。在SSO服務器上部署CasServer的war包,需要配置用戶數據源,根據需求修改登錄頁面。
第一次前端跳轉:客戶端訪問應用系統,應用系統判斷Session發現未登錄,返回302跳轉到sso登錄頁面,并傳遞service參數給sso,該service參數有兩個作用:
service一般傳遞應用系統url地址,用于sso認證通過后回跳到應用系統;
service參數同時會被cas服務端的作為cas客戶端的唯一標記記錄下來,用于后期匹配相應的認證憑據;
第二次前端跳轉:瀏覽器顯示登錄頁面,用戶輸入賬號密碼登錄成功后,sso會返回302跳轉回到原來請求的應用系統頁面,并攜帶ticket參數,作為認證票據,同時通過Set-Cookie向瀏覽器記錄TGT,(TGT的作用將在下一個應用系統需要登錄的時候體現出作用,是避免重復登錄的關鍵)
一次后臺驗證:應用系統接收到帶有ticket的請求后,從后臺直接向sso服務器發起一個http請求,將service和ticket作為參數,用于驗證ticket的有效性;如果ticket有效,sso服務器將返回該ticket對應的登錄用戶名。
(2)再次訪問(訪問第二個應用系統app2)
當用戶已經登錄過一個應用系統以后,在同一個瀏覽器上訪問第二個應用系統,根據單點登錄的要求此時不應該再登錄,而是直接進入第二個系統。但是實際上還是需要經過兩次前端跳轉、一次后端驗證,只不過此時的兩次跳轉是連續的,中間不會再出現登陸頁面,用戶感受不到。判斷的依據就是前面第4步通過Set-Cookie保存到客戶端的TGT(Ticket Granted Cookie )。
相比首次訪問,少了之前的第3步(不需要再出現登錄頁面),因為此時在第二步跳轉時,攜帶了之前保存的TGT,cas服務端通過TGT可以得知用戶信息,因此直接生成ticket返回給應用系統。所以此時是兩次連續的302跳轉,用戶看到的效果就是直接進入第二個應用系統了。
以上就是關于“一文讀懂cas單點登錄原理”的介紹,大家如果想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容細致全面,從入門到精通,很適合小白學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習