「黑馬程序員」單點登錄實現原理(SSO)

簡介

· 單點登錄是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統的保護資源,若用戶在某個應用系統中進行註銷登錄,所有的應用系統都不能再直接訪問保護資源,像一些知名的大型網站,如:淘寶與天貓、新浪微博與新浪博客等都用到了這個技術。

原理

· 單點登錄

· 有一個獨立的認證中心,只有認證中心才能接受用戶的用戶名和密碼等信息進行認證,其他系統不提供登錄入口,只接受認證中心的間接授權。間接授權通過令牌實現,當用戶提供的用戶名和密碼通過認證中心認證後,認證中心會創建授權令牌,在接下來的跳轉過程中,授權令牌作為參數發送給各個子系統,子系統拿到令牌即得到了授權,然後創建局部會話。

· 示例:

「黑馬程序員」單點登錄實現原理(SSO)

下面對上圖進行解釋:

· 當用戶還沒進行用戶登錄的時候

· 用戶去訪問系統1的保護資源 ,系統1檢測到用戶還沒登錄,跳轉至SSO認證中心,SSO認證中心也發現用戶沒有登錄,就跳轉到用戶至認證中心的登錄頁面

· 用戶在登錄頁面提交用戶相應信息後,認證中心會校驗用戶信息,如果用戶信息正確的話認證中心就會創建與該用戶的全局會話(全局會話過期的時候,用戶就需要重新登錄了。全局會話中存的信息可能有令牌,用戶信息,及該在各個系統的一些情況),同時創建授權令牌,然後進行下一步,否則認證中心給出提示(用戶信息有誤),待用戶再次點擊登錄的時候,再一次進行校驗用戶信息

· 認證中心帶著令牌跳轉到用戶最初請求的地址(系統1),系統1拿到令牌後去SSO認證中心校驗令牌是否有效,SSO認證中心校驗令牌,若該令牌有效則進行下一步

· 註冊系統1,然後系統1使用該令牌創建和用戶的局部會話(若局部會話過期,跳轉至SSO認證中心,SSO認證中心發現用戶已經登錄,然後執行第3步),返回受保護資源

·

用戶已經通過認證中心的認證後

用戶訪問系統2的保護資源,系統2發現用戶未登錄,跳轉至SSO認證中心,SSO認證中心發現用戶已經登錄,就會帶著令牌跳轉回系統2,系統2拿到令牌後去SSO認證中心校驗令牌是否有效,SSO認證中心返回有效,註冊系統2,系統2使用該令牌創建與用戶的局部會話,返回受保護資源。

·

·

如果系統1的局部會話存在的話,當用戶去訪問系統1的保護資源時,就直接返回保護資源,不需要去認證中心驗證了

·

局部會話存在,全局會話一定存在;全局會話存在,局部會話不一定存在;全局會話銷燬,局部會話必須銷燬

如果在校驗令牌過程中發現客戶端令牌和服務器端令牌不一致或者令牌過期的話,則用戶之前的登錄就過期了,用戶需要重新登錄

關於令牌可參考:基於跨域單點登錄令牌的設計與實現

· 單點註銷

· 在一個子系統中註銷,全局會話也會被註銷,所有子系統的會話都會被註銷

· 示例:

「黑馬程序員」單點登錄實現原理(SSO)

用戶向系統1發出註銷請求,系統1根據用戶與系統1建立的會話id從會話中拿到令牌,向SSO認證中心發起註銷請求,認證中心校驗令牌有效,會銷燬全局會話,同時取出此令牌註冊的系統地址,認證中心向所有註冊系統發出註銷請求,各系統收到註銷請求後銷燬局部會話,認證中心引導用戶跳轉值登錄頁面。

· 整體陳述

· 單點登錄涉及SSO認證中心與多個子系統,子系統與SSO認證中心需要通信(交換令牌、校驗令牌及發起註銷請求等),子系統中包含SSO的客戶端,SSO認證中心是服務端

· 認證中心與客戶端通信可通過 httpClient、web service、rpc、restful api(url是其中一種) 等實現

· 客戶端與服務器端的功能

· 客戶端:

· 攔截子系統未登錄用戶請求,跳轉至sso認證中心

· 接收並存儲sso認證中心發送的令牌

· 與服務器端通信,校驗令牌的有效性

· 建立局部會話

· 攔截用戶註銷請求,向sso認證中心發送註銷請求

· 接收sso認證中心發出的註銷請求,銷燬局部會話

· 服務器端:

· 驗證用戶的登錄信息

· 創建全局會話

· 與客戶端通信發送令牌

· 校驗客戶端令牌有效性

· 系統註冊

接收客戶端註銷請求,註銷所有會話


分享到:


相關文章: