基於.Net的單點登錄(SSO)解決方案

基於.Net的單點登錄(SSO)解決方案

      前些天一位朋友要我幫忙做一單點登錄,其實這個概念早已耳熟能詳,但實際應用很少,難得最近輕閒,於是決定通過本文來詳細描述一個SSO解決方案,希望對大家有所幫助。SSO的解決方案很多,但搜索結果令人大失所望,大部分是相互轉載,並且描述的也是走馬觀花。
      閒話少敘,進入正題,我的想法是使用集中驗證方式,多個站點集中Passport驗證。 如下圖所示:

      爲方便清晰描述,先定義幾個名詞,本文中出現之處均爲如下含義。

      主站:Passport集中驗證服務器 http://www.passport.com/
      分站http://www.a.com/http://www.b.com/http://www.c.com/ 
      憑證:用戶登錄後產生的數據標識,用於識別授權用戶,可爲多種方式,DEMO中主站我使用的是Cache,分站使用Session。
      令牌:由Passport頒發可在各分站中流通的唯一標識。
      OK,現在描述一下單點登錄的過程:
      情形一、匿名用戶:匿名用戶訪問分站a上的一個授權頁面,首先跳轉到主站讓用戶輸入帳號、密碼進行登錄,驗證通過後產生主站憑證,同時產生令牌,跳轉回分站a,此時分站a檢測到用戶已持有令牌,於是用令牌再次去主站獲取用戶憑證,獲取成功後允許用戶訪問該授權頁面。同時產生分站a的本地憑證,當該用戶需要再次驗證時將先檢查本地憑證,以減少網絡交互。
      情形二、在分站a登錄的用戶訪問分站b:因爲用戶在分站a登錄過,已持有令牌,所以分站b會用令牌去主站獲取用戶憑證,獲取成功後允許用戶訪問授權頁面。同時產生分站b的本地憑證。

      設計完成後,接下來是方案實現的一些關鍵點:
      令牌:令牌由主站頒發,主站頒發令牌同時生成用戶憑證,並記錄令牌與用戶憑證之間的對應關係,以根據用戶提供的令牌響應對應的憑證;令牌要在各跨域分站中進行流通,所以DEMO中令牌我使用主站的Cookie,並指定Cookie.Domain="passport.com"。各分站如何共享主站的Cookie?從分站Redirect到主站頁面,然後該頁面讀取Cookie並以URL參數方式回傳即可,可在DEMO代碼中查看詳細實現,當然如果哪位有更好的令牌實現方式也拿出來分享。

發佈了7 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章