1. 程式人生 > >【SSO單點登入實現原理與總結】

【SSO單點登入實現原理與總結】

一、什麼是單點登入SSO(Single Sign-On)

       SSO是一種統一認證和授權機制,指訪問同一伺服器不同應用中的受保護資源的同一使用者,只需要登入一次,即通過一個應用中的安全驗證後,再訪問其他應用中的受保護資源時,不再需要重新登入驗證。

二、單點登入解決了什麼問題

  解決了使用者只需要登入一次就可以訪問所有相互信任的應用系統,而不用重複登入。

       例如CSDN中的論壇應用,部落格應用,下載應用模組。我們只要在CSDN中訪問任何一個子應用後,再訪問其他應用站點的時候就不需要在進行登入。

三、在公司裡面也通過.NET,進行了SSO的開發。在網上看過不少的SSO實現方法。總結在實際專案開發中的一些開發體會。先看下面的流程圖:


 一.使用者第一次訪問站點。

1. 使用者第一次訪問>www.a.com ,這個時候該站點下沒有記錄之前登入的Cookie,

2. 所有在發現沒有使用者登入的情況下>跳轉到了Login 頁面。

3. 使用者現在輸入使用者名稱,密碼登入,請求SSO登入API,登入成功,在Redis裡面快取一條Key=SessioID,Values=UserInfo這樣一條記錄,快取時間可配置。Response 返回登入驗證狀態,和使用者資訊。

4. 使用者登入成功,記錄下憑證,即此刻的SessionID寫入Cookie.然後跳轉到www.a.com

5. 這個時候有了Cookie,將記錄的Cookie,也就是SessioID請求SSO驗證Token介面,因為登入成功記錄了Key=SessionID,所有可以獲取到Values=即使用者資訊,Response 返回使用者資訊。

6. 使用者現在去訪問www.B.com站點,B站點無Cookie,這裡SessionID還是當前會話的SessionID,所有區請求SSO主站點驗證Token介面,發現存在Key=SessionID,返回登入狀態成功,使用者資訊。在B站點下記錄Cookie 即token 配置。

 這樣使用者第一次訪問A站點,從第一次登入,到訪問其他站點的流程就走完了。

 二.使用者中途關閉瀏覽器,然後開啟瀏覽器,訪問B站點:

1. 發現存在Cookie, 即Token憑證,去SSO主站的,驗證發現存在Key=SessioID,獲取Values將UserIno返回給使用者,返回使用者任在登入狀態。這樣訪問應用之前訪問過的站點依舊在登入狀態。

2. 如果使用者在執行訪問第二個應用,這時候Redis快取的登入狀態過期,則返回驗證憑證失敗。這時候第二個應用跳轉到登入狀態,走使用者登入的流程以及後續驗證流程。

注意記錄Cookie的過期時間應該保證與Redis的過期時間一致性,不能在Redis快取的過期時間之後過期,這樣在使用者此時訪問第一個應用站點的時候,發現Cookie不存在,就會通過SessionID去驗證憑證,發現這時候是過期後重新登陸,會將此時的登陸狀態寫入Cookie.

  三.登出

只需要清除本地Cookie,呼叫SSO站點介面清除登陸快取的狀態即可實現登出。

 四.注意:

在實際的專案開發中會遇到各種情況,比如子站點和SSO主站點的介面呼叫引數約束,簽名,加密等。以及純html站點的實現SSO登入介面,或者純.NET應用網站的跳轉介面,這些都要區別開來。只有在詳細瞭解SSO實現單點登入的原理之後進行開發才能做到事半功倍的效果。

工欲善其事必先利其器 。

奮鬥