經常遇到這樣的情況,在一個大網站下的某個頻道中登錄成功,在其下屬網站都不需要登錄了,他們的整合的非常好,即使是域名不一樣也沒有影響的。這種情況下就需要使用單點登錄方式來解決。這裡在網上收集的一個關於單點登陸(SSO)的解決方案,拿來和大家一起分享。
單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登錄映射到其他應用中用於同一個用戶的登錄的機制。
當用戶第一次訪問應用系統1的時候,因為還沒有登錄,會被引導到認證系統中進行登錄;根據用戶提供的登錄信息,認證系統進行身份效驗,如果通過效驗,應該返回給用戶一個認證的憑據--ticket;用戶再訪問別的應用的時候就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之後會把ticket送到認證系統進行效驗,檢查ticket的合法性。如果通過效驗,用戶就可以在不用再次登錄的情況下訪問應用系統2和應用系統3了。
支持多域的單點登陸:
1、需要驗證服務器驗證服務器相當於同一入口,任何登陸和注銷工作都會通過這裡,驗證的工作也在這裡進行
2、過程
a,b,c服務器為業務服務器,d為驗證服務器
用戶A在a服務器上進行需要驗證的操作(比如url_a),a服務器發現用戶未登陸,則跳轉到d服務器的登陸頁面,d服務器通過A用戶驗證後,生成用戶的session,並同時生成用戶的一次性令牌並附加在url_a後面(比如url_a?ssid=key_id)進行跳轉,此時a服務器根據傳入的ssid通過遠程調用或者服務器間私有通道調用d服務器的驗證服務,d服務器判斷令牌是否有效並刪除次令牌,如果通過驗證此時a服務器獲得用戶信息,d服務器記錄a服務器的地址,此時A用戶在a服務器上已經登陸了。如果A用戶在b或者c服務器上訪問需要驗證的操作比如(url_b),則跳轉到d服務器的登陸頁面,因為已經存在著a用戶的session,此時同樣生成一次性令牌重復上述過程。
3、退出過程用戶A在a、b服務器登陸,用戶點擊d服務器的退出鏈接,則d服務器清除d服務器session,同時根據session中A用戶登錄過的服務器列表通過頁面上有img指到a,b服務器的退出功能,此時通過這種方式同時清除a,b服務器上的A用戶session