2011-08-15 28 views
2

我有兩個MVC3站點,都託管在同一臺服務器上,我配置爲使用相同的身份驗證Cookie。ASP .NET跨站點表單身份驗證適用於開發但不生產

第一個站點是使用Windows身份驗證的Intranet站點。該站點有一個簡單的Action,用於檢查用戶是否已通過身份驗證(如果用戶已經過),它會創建一個FormsAuthentication cookie,並將其添加到響應中。此Cookie是爲我從用戶的AD組中確定的通用用戶創建的。該響應然後將用戶重定向到使用表單身份驗證的第二個站點。

當我在我的本地機器上運行它時,一切都如上所述。當我將它部署到我們的本地Web服務器時,它不會。我已經測試過,看看用戶的組是否被正確確定,並且它爲cookie創建了一個有效的用戶,並且我已經驗證了這在Web服務器上是正確的。

這裏是我正在做上述所有的:

首先,我做了兩個網站使用加密和解密相同的同一臺機器的關鍵。

當我在Site1中創建cookie時,我確保它具有與在Site2上創建的cookie相同的名稱和域。

 var cookie = FormsAuthentication.GetAuthCookie(userName, false); 
    cookie.Domain = FormsAuthentication.CookieDomain; //This is the Domain of my 2nd site as they are different 

    HttpContext.Response.Cookies.Add(cookie); //Add my cookie to the response 
    HttpContext.Response.RedirectPermanent(urlForSite2); 

再次,當我在我的本地機器上運行它時,它的工作沒有問題。但是在部署時,它不是在請求中傳遞cookie,或者響應忽略它,但我不知道如何驗證這些情況。

隨意問任何關於我如何做這個,如果它將有助於得到我需要的答案的細節問題。

回答

1

不允許跨域cookie。如果你有兩個獨立的域名;一個不能訪問其他cookie。使用相同的機器密鑰時,兩個獨立的虛擬目錄/應用程序可以工作。 http://blogs.technet.com/b/sandy9182/archive/2007/05/07/sharing-forms-cookie-between-asp-net-web-application.aspx

如果您想要在子域之間共享登錄cookie,您需要將登錄cookie的Domain屬性編輯到第二級域「abc.com」,以便「www.abc.com」和「ww2。 abc.com「將有權訪問cookie。 http://forums.asp.net/t/1533660.aspx

String usrName = User.Identity.Name.ToString(); 
HttpCookie authCookie = Security.FormsAuthentication.GetAuthCookie(usrName, false); 
authCookie.Domain = "abc.com"; 
Response.AppendCookie(authCookie); 
+0

這是必須在同一臺服務器機器?什麼時候在同一臺機器上工作,在不同的服務器上,不工作。我確定machineKey是一樣的。 –

+0

@JulianoOliveira - Forms Auth在服務器場(單獨的機器)上工作,您需要驗證machine.config的machineKey標籤的所有屬性都是相同的(validationKey,decryptionKey,驗證和解密)。如果服務器代表不同的子域,則在調用FormsAuthentication.SetAuthCookie後,必須在我的答案中使用代碼。 –

0

其實,這是可能的,但不是作爲域/子域cookie共享一樣簡單。

http://www.codeproject.com/KB/aspnet/CrossDomainSSOModel.aspx

雖然本文中給出的例子並不直接適用於我在做什麼,我會用一些表達的思想那裏得到我所需要的工作是什麼。它最終成爲我在site2 web.config中的配置設置。

我的網址如下

站點1需要一個主機條目它的尋址到宿主機器的特定IP地址。這也是我的IE安全設置 - 本地Intranet站點中的條目。

我應該注意到這些應用程序都是在相同的默認網站下運行的虛擬目錄。

我以爲我已經解決了我的問題,但將配置文件中的域設置爲空字符串,但是這不起作用。我不確定現在可以做什麼。這在我的本地機器上運行時仍然有效,但在我的服務器上運行時不起作用。唯一的區別是網址。

我的dev的機器使用的URL

我希望這增加了一些澄清。這個答案應該是作爲我的問題的編輯發佈的,但是當我最初發布它時,我認爲我已經開始工作了。

更新:我想我的答案是在我上面的URL中。我的開發機器URLs都使用相同的域名,在本例中是localhost。我想如果我改變我的部署網站使用相同的域名,我會沒事的。當我解決問題時我會發布更新。

+0

我現在發現,在我的本地IIS服務器上,使用上面提到的開發計算機URL,我必須將我的web.config的窗體設置中的Domain屬性保留爲空字符串,否則將無法在此處工作。 –

相關問題