2009-07-31 59 views
6

在.net應用程序中實現單點登錄的最佳解決方案是什麼?我搜索了一下,發現了很少的解決方案,但我不太相信這些解決方案。如何在.Net中實現單點登錄?

用戶登錄網站1,然後移動到網站2。網站2如何知道用戶已登錄?我猜想通過在URL中傳遞一些令牌來驗證數據庫中的website2是否有效。這意味着我需要在網站1中搜集網站2中的所有網址?

其次如果用戶繼續瀏覽網站2說1小時,然後移動到網站1。到那時website1會話已超時,用戶將看到一個登錄頁面,不是嗎?但是這種行爲在每次登錄功能上都是錯誤的。

+0

這是單一身份驗證,而不是單一登錄,您必須使用相同身份驗證登錄N次網站。 – 2009-09-15 14:01:38

+0

您應該區分認證和授權。您可以授權用戶,這意味着您知道他們是他們自稱的人,但您仍然需要授權該用戶在您的兩個網站中的任意一個上訪問他們可以訪問的內容,並且無法訪問每個網站。令牌將過期,但通常可以刷新以保持訪問權限。 – htm11h 2017-06-06 14:06:11

回答

14

我認爲你誤解了單點登錄的工作原理。

讓我們考慮要使用單點登錄的網站1和網站2。

在identityProvider上創建登錄網站。這是登錄屏幕出現的唯一地方。

當用戶訪問website1並選擇登錄website1時,將用戶發送到identityProvider的登錄屏幕。用戶登錄到identityProvider,該用戶放棄其自己的域的登錄cookie(也許允許用戶保存他們的認證信息,以免他們再次被提示)。然後,它將瀏覽器重定向回網站1,其中包括請求中的一個令牌,該網站1已破解,獲取身份信息並執行自己的登錄位(將自己的身份驗證cookie丟棄,但不管它是否持續)。

然後用戶訪問網站2並選擇登錄。 Website2將用戶反彈到identityProvider,他已經知道用戶是誰,如果用戶選擇保存他們的登錄信息,則默認進行身份驗證,然後使用另一個令牌打開網站2,然後執行自己的登錄位,然後重定向回網站2。

有一堆圍繞它的安全性,限制令牌特定的網站,只允許令牌來等等,等等

因此,要解決您的問題

  1. 用戶登錄發送到白名單的網站網站1,然後移動到網站2。網站2如何知道用戶已登錄?它沒有。 website2必須首先從單點登錄網站請求認證信息。
  2. 這意味着我需要marshall網站1中的所有網址到網站2?不,除非你讓網站1成爲身份提供者。即使如此,這將是痛苦的,如果需要令牌,網站2重定向回身份提供者會更好。
  3. 其次,如果用戶繼續瀏覽網站2說1小時,然後移動到網站1。到那時website1會話已超時,用戶將看到一個登錄頁面,不是嗎? - 這取決於你如何配置website1,以及它的身份驗證cookie持續多久。
  4. 但是這種行爲是錯誤的,因爲每個功能上的單一登錄。不,這不對。單點登錄並不意味着您會獲得站點間共享的浮動令牌。每個使用單點登錄的網站仍會創建自己的身份驗證Cookie。如果用戶返回到網站1,它會檢測到過期的身份驗證Cookie,然後將用戶再次發送到單一登錄頁面(在他們進行身份驗證時)(靜默),並將新的令牌推回到網站1,從而創建新的身份驗證Cookie。
0

MS做了一份關於其在企業內部,幾年前 - 我們建立了樣品,但從來沒有實現它真正的 - Single Sign-on

+0

我已經看過那篇論文,但它並沒有回答我的疑問。 – 2009-07-31 09:31:57

3

微軟官方的方法是通過活動目錄聯合服務(它包裝SAML與AD認證)。這具有您正在尋找的特徵 - 但對於公共Web應用程序來說可能太重了。

3

我假設您不想使用Windows身份驗證和Active Directory等。一種方法是使用查詢字符串上的安全令牌,從一個已驗證的會話切換到另一個,如您所描述的。

這兩個應用程序都使用相同的公共加密密鑰對安全令牌進行編碼/解碼。正如你所說,如果你在網站之間有一個有限的,預定義的轉換鏈接,但是如果你希望能夠使用應用程序之間的任何頁面鏈接,那麼你就需要在動態生成這些網址以便它們包含這個標記。

您處理超時的方式是安全令牌還包含到期時間。您每個頁面請求都會生成一個新的安全令牌,或者您在應用程序之間創建新的鏈接。

通常,安全性令牌包含用戶標識和超時,並且登錄檢查程序會返回用戶標識,如果超時已過期,則返回null。

這不是一個快速的解決方案,適當和安全地進行編碼。也許你可以在代碼項目中找到預建的代碼?

1

根據您的應用程序,您可以針對不同的應用程序使用不同的SSO機制。

然而,我可以看到來自Live,谷歌,谷歌的「開箱即用SSO」服務,雅虎,Facebook等通過支持SAML來提供身份驗證。這將幫助我們擺脫維護我們自己的SSO服務實施的問題。

如果你需要一個基本的瞭解如何SSO工作,你可以參考here