2009-05-28 150 views
1

我有兩個ASP.NET站點(它們不能在同一個進程中運行),我需要在它們之間共享身份驗證。如果用戶在A站點已經通過身份驗證,然後進入站點B,我需要有一種方法與站點B共享這些信息,以免用戶再次進行身份驗證。兩種方式都是如此。你如何分享這些信息?在ASP.NET站點之間共享身份驗證

+0

的http://stackoverflow.com/questions/72125/how-do-you-pass-an-authenticaticated-session-between-app-domains – Kevin 2009-05-28 23:24:24

回答

4

它們在同一個域中嗎?

如果你有app1.blah.com和app2.blah.com,這很容易做到。只需設置域和名稱相同的值的形式,部分在web.config中:

<authentication mode="Forms"> 
     <forms loginUrl="login.aspx" 
     name=".COOKIENAME" 
     protection="All" 
     path="/" 
     domain="blah.com" 
     timeout="30" /> 
    </authentication> 

另外一個好處是,用戶可以登錄到站點和仍然會被驗證,如果他們去其他一。

0

查看Windows Communication Authentication Service。不會像你想要的那樣處理單一登錄,但它至少應該讓人們用相同的憑證登錄。

+0

這種想法是行不通的重複在這種情況下,因爲我需要在站點A中使用已經存在的登錄過程。如果用戶直接登錄到站點B,那麼將針對站點A運行Web服務以進行身份​​驗證。真正的問題是他們已經通過身份驗證並更改網站。 – user31673 2009-05-28 23:30:58

2

選擇一個站點作爲處理所有登錄的「主站」。我們將稱這一個網站爲A,非登錄網站爲B.

當用戶在A上使用登錄表單時,它應該設置一個帶有一些唯一標識符(如GUID)的cookie。只要該cookie有效,用戶應該保持登錄狀態。

當用戶轉到站點B時,站點B應該使用自己的唯一標識符(另一個GUID)設置cookie,然後重定向到站點上的登錄A,在查詢字符串中傳遞唯一ID:Response.Redirect("http://siteA.com/login.aspx?id=ABCDEF")

當用戶登錄A上的表單時,我們應該更新B站點的數據庫 - 可能通過Web服務 - 使用用戶ID和傳遞的唯一ID沿着 - 實際上讓站點B知道「當cookie中的ABCDEF用戶打你的站點時,它實際上是User387」。

然後重定向回站點B.早期的cookie仍然設置,但站點B現在讀取該cookie並找到相應的用戶ID,因此它知道用戶是誰並允許訪問。

當用戶到達站點A時,如果他們以前已經登錄到站點A,它將識別他們的cookie,遵循上述相同步驟並立即重定向。

這是每個單點登錄服務所做的簡單版本。無論用戶從何處開始(站點A或站點B),用戶只會被髮送到A的登錄頁面一次。

+0

不使用相同的域。當用戶在站點A並且已經通過身份驗證時,然後移動到站點B,站點B如何知道他們已經通過身份驗證?我不想登錄兩次。 – user31673 2009-05-29 00:26:11

+0

@當他們移動到站點B時,他們沒有cookie,因此站點B將創建一個cookie並重定向到站點A的登錄名,如上所述;站點A已經有一個cookie,並且能夠識別用戶,從而跳過手動登錄過程並直接將用戶ID和唯一ID發送回B,然後重定向回B. – 2009-05-29 00:51:25

相關問題