程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 多站點單點登錄(SSO)設計

多站點單點登錄(SSO)設計

編輯:關於ASP.NET

這是一個老話題了,當前各門戶一般也都實現了多個業務之間的單點登錄。下面根據 我經歷過的項目,談一下我自己的看法。

為什麼需要單點登錄:

產品剛上線時,一般由於用戶量少,所有的功能都放在一起,一般也不需要具體的單 點登錄。隨著用戶量和業務發展的需要,要求逐步將產品按功能或性能分為相應獨立的站 點,並分開部署,這就需要在各個站點之間進行單點登錄,以達到用戶一次登錄,就可以 使用多個站點。

單點登錄的實現:

簡單方法: 在同一個域內的站點,可以簡單的通過共享Cookie(將登錄用戶名存放 Cookie中)來實現單點登錄。這種方法實現簡單,安全性方法可以通過將Cookie值加密方 式加強,但對不同域下及不同開發語言下(如A站點C#,B站點C)實現麻煩。

推薦方法:建立統一的認證中心,認證中心提供:

1、用戶登錄認證(認證用戶名和密碼),如果成功,返回表示本次登錄的登錄 Token

2、登錄Token認證(認證Token是否正確),如果成功,返回當前登錄的用戶名

3、延長Token有效期

4、退出(使Token失效)

認證中心獨立於各個站點,單點流程一般場景如下:

1、用戶在站點A輸入用戶名和密碼點擊登錄

2、站點A將用戶名和密碼轉發給認證中心進行認證,認證中心返回Token

3、站點A將當前登錄用戶和Token存入Session(或Cookie)

4、在站點A上點擊連接訪問站點B,通過URL參數方式,將Token帶給站點B

5、站點B將Token轉交到認證中心,認證正確,返回當前用戶名。

6、站點B將當前登錄用戶和Token存入Session(或Cookie),完成登錄流程

這樣的設計下的Token,還可以用在異步使用Ajax去訪問服務器端的接口(接口可能獨 立部署在不同的站點下),這樣只需要帶上Token,服務器端的接口認證Token通過後,直 接返回這個登錄用戶的相應用戶信息。

安全性考慮:

1、用戶登錄認證接口,可增加認證頻率、認證IP等限制,防止暴力攻擊

2、Token其實就是一串表示本次登錄的唯一字符串,可以生成字符串時,增加摘要信 息。如Token的組成為:A+MD5(A+PWD) 的方式,A為隨機生成的GUID,這樣在驗證Token時 ,就可以直接通過算法來驗證合法性,只有算法驗證通過後,再進行下一步的操作。

以上只是從整體上描述統一認證的設計,中間還有很多細節沒有描述出來,需要了解 的我們可進一步討論。

下一篇,准備寫一下認證中心內部,如何實現分布式認證系統,支持高並發、防攻擊 等方面內容。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved