topcat姍舞之間的極度凝聚

分享...是知識累積的開始....(Microsoft ASP/ASP.NET MVP)


My Links

Blog Stats

News

搬家公告:
未來小喵的文章會以點部落為主。
http://www.dotblogs.com.tw/topcat/
小鋪也會同步貼過來。不過在排版上能會比較沒有兼顧到。歡迎舊雨新知多多支持。 有與小喵交換網址或者訂閱的人,也建議連到那邊去。



目前線上人數:

隨筆分類

每月文章

影像集

其他部落格

工具網站

技術論壇

線上教學

語言學習

當我們開發了許多的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發生碰撞的機會很低,並且在加上過期時間的保護,小喵覺得應該還算安全,大家覺得怎麼樣再請大家給小喵一些建議

^_^

posted on Thursday, April 03, 2008 8:13 AM

Feedback

# re: 跨網站單一登入(Single Sign On)的作法概念 4/23/2008 2:46 PM player

個人想法
你的作法是透過資料庫來同步跨網站的處理

可是
為何不把登入的介面
寫成一個單一的WebService的介面呢?

跨網站的登入
一樣用GUID當參數傳遞
但是你如果寫成WebService的登入驗證的話
或許對於跨網站的再驗證
可以免經資料庫
例如使用 .NetFrameWork的 System.Collections.Generic.Dictionary<>
來當已登入的識別資料的Catch


# re: 跨網站單一登入(Single Sign On)的作法概念 4/23/2008 10:56 PM topcat

感謝Player的回應

小喵在想,如果透過單一的WebService介面,那麼那些要記錄的資訊不知道應該如何儲存於WebService中
舉個例子
1.A網站中,呼叫WebService,(記錄GUID,並記錄帳號)
2.A網站傳遞GUID給B網站
3.B網站中,呼叫WebService,透過GUID,取出相關帳號密碼
4.B網站中進行驗證
5.驗證通過
在這個過程中,除了GUID必須傳遞外,可能還需要兩邊的帳號一置,才能在B網站中進行4.的步驟(驗證)

小喵不太清楚如果不透過資料庫,要如何處理1.步驟中()裡面的記錄動作。

以上是小喵的小小看法...懇請Player指導一下
感恩
^_^


# re: 跨網站單一登入(Single Sign On)的作法概念 4/25/2008 5:32 PM 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是給跨網站時, 變數互通使用

有要討論的話
改天再連絡 msn
playercd8@hotmail.com



# re: 跨網站單一登入(Single Sign On)的作法概念 4/25/2008 5:32 PM 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是給跨網站時, 變數互通使用

有要討論的話
改天再連絡 msn
playercd8@hotmail.com



# re: 跨網站單一登入(Single Sign On)的作法概念 4/25/2008 5:32 PM 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是給跨網站時, 變數互通使用

有要討論的話
改天再連絡 msn
playercd8@hotmail.com



# re: 跨網站單一登入(Single Sign On)的作法概念 7/11/2008 7:21 PM player

http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3604061&SiteID=14

繼續討論嗎?


# ????????????????????? &raquo; [Web] ???????????? 11/25/2009 10:41 AM Pingback/TrackBack

????????????????????? &raquo; [Web] ????????????


Post Feedback

Title:
Name:
Url:
驗證碼  
Comments: