7

我正在使用SimpleMembership在ASP.NET MVC4項目上工作,當您登錄時它會生成一個ASPXAUTH cookie。它似乎工作得很好,但是今天我打開了另一個MVC4項目,只注意到我已經登錄。Simplemembership ASPXAUTH cookie在兩個獨立的Web項目上驗證

這非常奇怪,因爲新項目字面上沒有任何用戶在數據庫中定義。更令人不安的是,當我在新項目上「註銷」時,它使我離開了原來的網站。

這兩個站點都在不同的端口上運行,雖然都在本地主機上。當檢查請求以瞭解它爲什麼返回「IsAuthenticated == true」時,我注意到ASPXAUTH cookie正被髮送到兩個站點,並且調試器中cookie的「domain」參數爲「null」。這讓我認爲cookie可能是作爲「無域名」cookie生成的(我不知道這樣的事情是否可能,說實話!),並且查看web.config設置以指定一個域:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626" /> 
</authentication> 

不幸的是,設置「域」參數使cookie停止工作。我嘗試了所有的排列組合(使用http,沒有http,使用端口,不使用端口等),並且每次指定一個域時,瀏覽器都會收到帶有正確指定域名的cookie(我在Chrome開發人員工具中對其進行了檢查),但之後無法將其發送回服務器的後續請求。

所以,我很困惑這裏發生了什麼。這是否是由於未在某處正確設置某些東西而導致的安全漏洞?或者,ASPXAUTH cookie將授權用戶在同一個域上的兩個不同端口上的兩個完全不同的Web應用程序中完全正常行爲?我會在網絡主機上測試這一點,但不幸的是,我目前無法訪問任何運行MVC4的應用程序。

在此先感謝。

+0

在這裏檢查http://stackoverflow.com/questions/1612177/are-http-cookies-port-specific – Chandermani

回答

5

ASPXAUTH是給cookie的默認名稱,但通過更改Web.Config中每個項目的名稱,您可以使其僅適用於該項目。

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626" name=".PROJ1AUTH"/> 
</authentication> 
3

添加名稱屬性的表單元素。它會在您提供的名稱之後命名authcookie,使其在其他項目中獨一無二。

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" name="A_UNIQUE_NAME" /> 
</authentication> 
+0

工程!如果您同時有2個已打開的項目,這很有用。 – cryss