跨網站單一登入(Single Sign On)的作法概念

為了方便使用者的使用,因此會有【單一登入】的需求出現,只要登入一個應用程式後,要跳到別的Web應用程式,不需要再次輸入帳號密碼,可以直接就進行登入。但是為了考量安全性,還是要考量一下怎麼設計才能夠兼顧安全與便利。

當我們開發了許多的Web應用系統後,如果使用者同時擁有多個Web應用程式的使用權限,而每個Web應用程式都有自己的登入帳號密碼,那麼對於使用者來說,有點麻煩,尤其是剛好設定的密碼又不同。

為了方便使用者的使用,因此會有【單一登入】的需求出現,只要登入一個應用程式後,要跳到別的Web應用程式,不需要再次輸入帳號密碼,可以直接就進行登入。但是為了考量安全性,還是要考量一下怎麼設計才能夠兼顧安全與便利。

小喵的方式是透過SQL來當作媒介,假設小喵要從WebA跳到WebB。
首先要準備一個兩個應用程式都能夠存取的資料庫。然後設計一個資料表來處理。這個資料表有以下幾個欄位

  1. GUID:由NewId()產生出來類似【504B1790-E93A-4445-B262-E73A113BF336】這樣格式的資料
  2. UserId:WebB的帳號,當然WebA與WebB可以用相通的帳號,或者是透過員工代號取得WebB的帳號
  3. TimeOut:過期時間,產生該筆資料的時間+2分種。也就是從WebA到WebB的過程,小喵估計不會超過2分鐘,時間過期後該筆資料就沒用了。

接著就是運作的方式

步驟如下

  1. WebA點選轉入WebB
  2. 寫入1筆過程資料,例如:5ED095B8-350D-42C3-953B-9C53DED54AFD,topcat,20080402165823
  3. WebA Submit GUID給 WebB
  4. WebB承接到GUID取回資料,並判斷現在時間沒有大於20080402165823
  5. 如果4.找不到,顯示錯誤並拒絕登入
  6. 如果4找到,進行登入程序
  7. 刪除該GUID資料

這過程中的時間,過期時間拉得越長越不安全。太短又容易失敗,所以大家自己斟酌。

由於GUID發生碰撞的機會很低,並且在加上過期時間的保護,小喵覺得應該還算安全,大家覺得怎麼樣再請大家給小喵一些建議

^_^


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat