我有兩個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,或者響應忽略它,但我不知道如何驗證這些情況。
隨意問任何關於我如何做這個,如果它將有助於得到我需要的答案的細節問題。
這是必須在同一臺服務器機器?什麼時候在同一臺機器上工作,在不同的服務器上,不工作。我確定machineKey是一樣的。 –
@JulianoOliveira - Forms Auth在服務器場(單獨的機器)上工作,您需要驗證machine.config的machineKey標籤的所有屬性都是相同的(validationKey,decryptionKey,驗證和解密)。如果服務器代表不同的子域,則在調用FormsAuthentication.SetAuthCookie後,必須在我的答案中使用代碼。 –