1. 程式人生 > >SSO單點登入的實現

SSO單點登入的實現

這種方式需要我們藉助一個單獨的SSO服務,專門做驗證用。而且我們還需要對於不同的站點的使用者要有一個統一的使用者資料。這種方式瀏覽器只需要儲存SSO服務站點的cookie資訊。將這個cookie資訊用於其他站點從而實現單點登入。我們暫且將這個SSO服務站點成為www.SSOsite.com(以下簡稱SSOsite)。

在這種模型下,針對任何站點的請求都將會先重定向到SSOsite去驗證一個身份驗證cookie是否存在。如果存在,則驗證過的頁面將會發送給瀏覽器。否則使用者將會被重定向到登入頁面。

不同域之間單點登入利用第三方驗證服務SSO

為了理解此種方式,現在假設我們來運用這種模型實現以下兩個站點的單點登入。

www.onmpw1.com(以下簡稱onmpw1)
www.onmpw2.com(以下簡稱onmpw2)

並且我們還有一個專門用來進行驗證的服務站點www.SSOsite.com(以下簡稱SSOsite) 。

第一部分

不同域之間單點登入利用第三方驗證服務SSO流程圖一

實現流程

·使用者請求onmpw1的一個需要驗證的頁面

·onmpw1向瀏覽器傳送重定向到SSOsite的命令。並且在地址中新增一個返回地址(ReturnUrl)引數query string,該引數的值就是最初向onmpw1請求的地址。

·SSOsite會在請求中檢查是否有身份驗證cookie,或者任何使用者token。沒有這些資訊,則會再次重定向到onmpw1,在重定向到onmpw1中的請求中會帶有引數讓使用者登入的url引數和最初的瀏覽器請求onmpw1的地址——ReturnUrl。

·onmpw1會檢測從SSOsite重定向來的請求的引數。這時onmpw1瞭解到該使用者需要登入,因此onmpw1會重定向到登入介面,並且通知瀏覽器該請求不用再重定向到SSOsite。

第二部分

不同域之間單點登入利用第三方驗證服務SSO流程圖二

·使用者提供了身份驗證資訊並且點選了登入按鈕。現在不會再去重定向到SSOsite。這時,onmpw1呼叫SSOsite 中的web/WCF服務去檢查使用者提供的身份驗證資訊。成功驗證,會將帶有token屬性的使用者物件返回給onmpw1。而這個token是每一次使用者登入都會生成的。

·onmpw1標記使用者已經登入成功,然後會生成一個URL地址,該地址會帶有使用者token,重定向到SSOsite。

·SSOsite檢查收到的URL地址,會在其中發現使用者token。通過該token可以知道使用者已經成功登入onmpw1了,所以SSOsite需要準備驗證的cookie資訊。因此,它會使用token在快取中取出使用者資訊來生成cookie資訊,而且還會在cookie中設定一些其他的資訊(例如過期時間等)。然後把cookie加入到響應資訊中。最後重定向到最初的ReturnUrl地址。同時token還是要被加在query string中帶過去的。

·瀏覽器得到重定向到onmpw1的命令,並且從SSOsite中得到cookie資訊。因此瀏覽器將所屬域為SSOsite的cookie儲存在本地。然後帶著token去請求onmpw1。

·現在onmpw1看到使用者token在query string 引數中,然後會再次通過web/WCF服務去在SSOsite上驗證token。驗證成功以後會將最初剛開始請求的頁面傳送給瀏覽器用於向用戶輸出。

第三部分

不同域之間單點登入利用第三方驗證服務SSO流程圖三

·使用者現在去請求onmpw2。

·onmpw2重定向到SSOsite,同樣設定ReturnUrl為剛開始請求的onmpw2的頁面地址。

·瀏覽器接收到重定向的命令以後,因為本地存在SSOsite的cookie,所以會cookie加到請求中傳送給SSOsite。

·SSOsite檢查接收到的請求中發現有cookie資訊,首先會檢查該cookie資訊是否過期,如果沒有過期,將會從cookie中提取出使用者token。然後帶著token重定向到最初的onmpw2中的地址。

·onmpw2發現請求中有使用者token,然後他會通過SSOsite的web/WCF服務驗證token的合法性。驗證成功以後,將最初瀏覽器請求onmpw2的頁面傳送給瀏覽器用以向用戶輸出。

總結

哇哦,看起來有很多東西需要做。其實並沒有那麼複雜。

起初,瀏覽器沒有所屬域為SSOsite的cookie資訊。因此無論是點選任何站點的需要驗證的介面都會跳轉到登入頁(這個過程是由程式內部重定向到SSOsite來檢查是否存在cookie的)。一旦使用者登入成功,所屬域為SSOsite的,並且帶有登入使用者資訊的cookie會被瀏覽器儲存在本地。

然後,當用戶再次訪問需要驗證的頁面的時候,同樣請求會在被重定向到SSOsite,並且瀏覽器會帶上先前已經儲存的cookie資訊。SSOsite檢索cookie,從中提取出使用者token,並帶著這個token重定向到最初請求的站點頁面。然後該站點會通過web/WCF服務去驗證token的合法性。然後將相應的頁面傳送給客戶端。

一旦使用者通過該單點登入模型登入到站點上,請求任何需要驗證的頁面都會內部重定向到SSOsite驗證cookie和提取使用者token,然後將請求的頁面傳送給瀏覽器輸出。