1.跨網站單一登入(Single Sign On)的作法概念 by topcat
小喵的方式是透過SQL來當作媒介,假設小喵要從WebA跳到WebB。
首先要準備一個兩個應用程式都能夠存取的資料庫。然後設計一個資料表來處理。這個資料表有以下幾個欄位
- GUID:由NewId()產生出來類似【504B1790-E93A-4445-B262-E73A113BF336】這樣格式的資料
- UserId:WebB的帳號,當然WebA與WebB可以用相通的帳號,或者是透過員工代號取得WebB的帳號
- TimeOut:過期時間,產生該筆資料的時間+2分種。也就是從WebA到WebB的過程,小喵估計不會超過2分鐘,時間過期後該筆資料就沒用了。
步驟如下
- WebA點選轉入WebB
- 寫入1筆過程資料,例如:5ED095B8-350D-42C3-953B-9C53DED54AFD,topcat,20080402165823
- WebA Submit GUID給 WebB
- WebB承接到GUID取回資料,並判斷現在時間沒有大於20080402165823
- 如果4.找不到,顯示錯誤並拒絕登入
- 如果4找到,進行登入程序
- 刪除該GUID資料
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實現應用程式的單實例運行
沒有留言:
張貼留言
留個話吧:)