SSO單點登錄(原理)
單點登錄全稱Single Sign On(以下簡稱SSO),是指在多系統應用羣中登錄一個系統,便可在其他所有系統中得到授權而無需再次登錄,包括單點登錄與單點註銷兩部分。
-------------------------------------------------------------------------------------------------------------------------------------------------------
相比於單系統登錄,sso需要一個獨立的認證中心,只有認證中心能接受用戶的用戶名密碼等安全信息,其他系統不提供登錄入口,只接受認證中心的間接授權。間接授權通過令牌實現,sso認證中心驗證用戶的用戶名密碼沒問題,創建授權令牌,在接下來的跳轉過程中,授權令牌作爲參數發送給各個子系統,子系統拿到令牌,即得到了授權,可以藉此創建局部會話,局部會話登錄方式與單系統的登錄方式相同。這個過程,也就是單點登錄的原理,用下圖說明
單點登錄客戶端Cookie和服務端Session圖解
步驟1:
描述:初始狀態:沒有請求,服務端沒有session,客戶端也沒有cookie
步驟2:
描述:當客戶端訪問www.crm.com時,本地沒有cookie,在crm.com服務端中查看是否有局部session,此時發現crm.com系統並沒有,尷尬的局面需要緩解一下,需要查看統一認證中心(sso.com服務端)是否有登錄(然而此時並沒有,雖然合乎情理,但又尷尬了),此時,需要做一件很重要的事情:把當前請求的地址作爲參數傳遞給統一認證中心!!!
步驟3:
描述:由於這是客戶端第一次對這個系統的訪問,客戶端瀏覽器Cookie中的sso.com目錄也沒有cookie,所以sso.com服務端也沒有全局的session,這時候調用sso.com中的checkLogin方法查看當然不會有全局的session。
步驟4:
描述:此時需要把redirectUrl從地址欄中獲取出來,把這個參數放入到request域中,一起轉發到統一認證的登錄頁面。
步驟5:
描述:在統一認證中心登錄界面輸入賬號和密碼,並帶着上一次訪問的地址(因爲登錄成功以後,需要跳轉到上次訪問的頁面)請求到 sso.com服務端進行身份校驗(查詢數據庫);校驗成功即後臺登錄成功,需要在sso.com中創建session對象和token(令牌),並把這個token信息放入到session中,方便後續的校驗;把session的id以cookie方式寫入到客戶端的瀏覽器中;重定向到最開始訪問的頁面(會帶着sso.com產生的token)
步驟6:
描述:客戶端瀏覽器重定向到crm.com&token=*****,過濾器攔截到請求,判斷是否有局部session,發現其並沒有,但是帶着token參數,則此時爲了保證安全,必須檢驗token的有效性,即判斷這個token是否來源於統一認證中心。
步驟7:
描述:使用HttpURLConnection發送請求(這個請求帶着token)到sso.com服務端,sso.com查詢數據庫,看是否存在該token,如果存在,則返回ture,否則返回false
步驟8:
描述:crm.com服務端接收到sso.com服務端的響應(token是ture還是false),若結果爲ture,crm.com服務端就會創建局部session,並設置屬性isLogin=ture;放行客戶端的請求,客戶端顯示請求的頁面,同時,將crm.com服務端的JSESSIONID寫入到客戶端的Cookie的crm.com目錄下,方便第二次及之後的訪問!!!
步驟9:
描述:第二次訪問crm.com時,請求會把本地瀏覽器的Cookie帶上(當然是crm.com目錄中的),在crm.com服務端能找到對應的session,並得到相應的isLogin的屬性,是ture,說明已經有局部會話了,此時就放行請求
步驟10:
描述:訪問wms.com服務端的原理同上
步驟11:
步驟12:
步驟13:
步驟14:
步驟15: