單點登錄(SSO)實現邏輯分享

轉自:http://www.iteye.com/topic/1137510

於企業的應用系統較多,爲了是員工實現一個用戶信息可以進行登錄到其他系統中,故使用單點登登錄(Single Sign On , 簡稱 SSO ) 進行實現,目前使用的SSO框架爲CAX (Central Authentication Service)是一款不錯的針對 Web 應用的單點登錄框架。

到 CAS 官方網站下載 CAS Server 和 Client,地址分別爲:

http://www.ja-sig.org/downloads/cas/cas-server-3.1.1-release.zip

http://www.ja-sig.org/downloads/cas-clients/cas-client-java-2.1.1.zip

對於具體CAS 的學習可以在官網和網絡平臺上進行學習研究,在這就不進行多說了,下面主要介紹企業的應用系統的 SSO 實現邏輯,可以對需要實現SSO 的系統提供解決思路。

邏輯實現時序圖:



 

 1) 假設現在有兩個應用App1和app2,用戶已經登錄了App1,需要跳轉或者直接訪問App2中的功能頁面。

App1的訪問地址爲:http://192.168.1.100/app1/;App2的訪問地址爲:http://192.168.1.101/app2/,需要訪問App2的頁面爲http://192.168.101/app2/action2.action

 

2) 假設用戶已經登錄了App1,用戶需要訪問App2的頁面,先將跳轉(外部訪問)請求發送給App1的ssoURLRequestServlet,如上圖中的環節①
請求的URL爲:http://192.168.1.100/app1/ssoURLRequest?app=app2&url=action2.action

 

3) App1根據ssoURLRequest獲取URL信息獲取跳轉的目標應用爲App2,地址爲action2.action(相對地址),並根據App2找到該應用的其它信息,比如:應用首頁路徑,IP地址,context path 等信息,組成訪問App2功能頁面的絕對路徑以及進行SSO登錄校驗的絕對路徑。

 

4) App1的ssoURLRequest獲取當前登錄用戶id(比如工號,保持和app2的相關信息一致),將:用戶id+app2+sessionId+uuid 數據經過加密生成Token1憑證並將憑證信息保存到緩存中(內存,集中緩存或者數據庫)發送給App2,請求App2生成登錄App2的憑證,請求地址爲:http://192.168.1.101/app2/tokenGenerat上圖中的環節②

 

5) App2接收到生成校驗信息請求之後,獲取App1發送過來的Token1憑證,請求App1的http://192.168.1.100/app1/tokenValidate,校驗Token1是否有效,如上圖中的環節③。如果有效,則生成登錄App2憑證信(Token2),並將憑證信息保存到緩存中(內存,集中緩存或者數據庫),同時將憑證信息加密後返回給App1的ssoURLRequestServlet。

 

6) App1的ssoURLRequestServlet接受到App1返回的登錄憑證信息後,將憑證信息返回給發送跳轉(訪問App2)請求的瀏覽器,並返回瀏覽器跳轉的腳本,瀏覽器攜帶登錄憑證信息(密文)跳轉至App2,上圖中的環節

 

7) App2接收到帶有登錄憑證的請求後,將憑證信息解密,並校驗該憑證信息是否有效,若有效,則根據解密後的憑證信息轉換爲用戶登錄信息並保存到session中(或者其他地方),至此實現登錄App2,在整個過程中用戶不需要輸入App2的登錄信息就實現了登錄App2,上圖中的環節

web.xml主要是配置單點登錄相關的servlet, 如 CAX 的的集成;

sso-common.xml配置每個應用對應的信息,包括應用ID、Token憑證信息保存方式等;

sso-current.properties配置Token過期時間、Token數據庫保存時的數據源定義、Token緩存保存時的Redis定義等。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章