星期四, 7月 29, 2010

[Asp.Net] 跨網站登入 Single Sign On (SSO)

目前的case暫以player大大提供的做法。

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

小喵的方式是透過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資料
2.跨網站登入機制 - by player
1.把你的登入用的相關欄位, 先用1個class先定義好
2.在Global.asax 中, 定義一個 static public 的變數, 當作是放資料的容器
請自行參照 System.Collections.Generic.Dictionary<> 與你在1所自訂的class
3.WebService 大概做5個公開的函式
a.登入
b.驗証是否已登入
c.登出
d.Set共用變數
e.Get共用變數

a.是傳入帳密, 登入成功時, 傳回GUID, 失敗時返回相關的提示訊息
b.是傳入GUID, 判斷是否已登入
d與e是給跨網站時, 變數互通使用

3.ASP.NET Single Sign-On
採用 .Net的表單驗證票證(Forms Authentication Tickets)的加密、解密以及驗證

一些背景知識參考:
鬼打牆事件之『ASP.NET 無法刪除 Cookie 的問題』 
解釋 Cookie 的特性 
深入瞭解 GUID 與為什麼要用 GUID(Globally unique identifier)
web service 介紹 
Dictionary in .NET C#
C#,利用Mutex實現應用程式的單實例運行

沒有留言:

張貼留言

留個話吧:)