1. 程式人生 > >SSO單點登入設計

SSO單點登入設計

完全跨域的單點登入實現方案生成ticket的過程更復雜些。由於多個應用系統以及認證系統域不同,也沒有共同的父域,導致登入後,認證系統向瀏覽器寫的ticket在其它應用系統中獲取不到,這時訪問其它應用系統時,沒有攜帶著ticket的cookie,無法認證也無法單點登入。那解決的方案是每個應用系統都向瀏覽器cookie中寫入ticket,請看下圖,圖中淺藍色圓角區域代表不同的域,當用戶通過瀏覽器第一次訪問應用系統1時,由於還沒有登入,會被引導到認證系統進行登入。

下面開始單點登入的過程:

認證系統根據使用者在瀏覽器中輸入的登入資訊,進行身份認證,如果認證通過,返回給瀏覽器一個證明[認證系統_ticket];這時再通過瀏覽器將[認證系統_ticket]傳送到到應用系統1的設定cookie的url,應用系統1返回給瀏覽器一個證明[應用系統1_ticket],這時再將請求重定向到最初訪問的頁面,以後應用系統1就可以自動登入了。

現在使用者訪問了應用系統2,由於應用系統2沒有生成過cookie(但是使用者已經在應用系統1登入過一次了),將請求重定向到認證系統(SSO的web頁面);認證系統檢測到已經生成過[認證系統_ticket]了,認證通過;再通過瀏覽器將[認證系統_ticket]傳送到到應用系統2的設定cookie的url,應用系統2返回給瀏覽器一個證明[應用系統2_ticket],這時再將請求重定向到最初訪問的頁面。

應用系統3也同樣原理,我們等於將ticket做了一次同步,保證了每個應用系統都有一份認證系統產生的ticket。剩餘的ticket驗證過程和上篇文章一樣了。

泳道圖示例

token=[認證系統_ticket]

ticket=[業務系統_ticket]