2012-11-12 84 views
3

我有發送身份驗證cookie到ASP.NET MVC應用程序,用作後勤應用ASP.NET應用程序。ASP.NET MVC 4餅乾消失

我添加了一個全局篩選器來檢查身份驗證Cookie每個控制器動作。如果cookie存在,它允許用戶進入頁面。

的代碼看起來是這樣的:

public class SecurityFilter : FilterAttribute, IAuthorizationFilter 
    { 
     public void OnAuthorization(AuthorizationContext filterContext) 
     { 
      // TODO: For some reason .AUTHCookie cookie isn't exist in request context of filter, 

          HttpCookie cookie = filterContext.RequestContext.HttpContext.Request.Cookies[".AUTHCookie "]; 


      if (cookie != null)     { 

從另一個方面,我可以看到從ASP.NET應用程序中Application_BeginRequest事件在Global.asax文件發送的cookie。

在哪裏,爲什麼餅乾消失了?在MVC請求處理管道的哪一部分丟棄了Cookie?

protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      var cookies = HttpContext.Current.Request.Cookies; 
      // HERE I CAN SEE BOTH cookies. In filter action only one cookie was found. The authentication cookie is thrown somewhere ... 
     } 
+0

確保cookie路徑爲「/」,它有足夠的到期日期。 – Nick

+0

你是什麼意思的單詞「足夠」?是{01/01/0001 00:00:00}是否足夠? – StringBuilder

+0

嘗試期滿設定成類似'DateTime.UtcNow.AddDays(1);'可能是該瀏覽器認爲與日期時間作爲上述過期該cookie。 – Nick

回答

3

我找到了我的方案的解決方案。我已經在這兩個應用程序中的機器鍵中添加了compatibilityMode =「Framework45」,並且它的工作都很完美。

注意:如果您的應用程序正在使用舊版本的.NET框架,你必須明確地配置您的.NET 4.5的應用程序使用較早的機器兼容模式,否則將無法進行加密/解密形成認證票證。

只是提醒你我的方案:

WebForms ASP.NET 4.5 

<machineKey compatibilityMode="Framework45" decryption="AES" validation="SHA1" decryptionKey="your_key1" validationKey="your_keu2" /> 
    <authentication mode="Forms"> 
    <forms name="_authcookie" domain=".domain.com" loginUrl="Default.aspx?View=1" defaultUrl="Default.aspx?View=1" timeout="30" path="/" protection="All" slidingExpiration="true" enableCrossAppRedirects="true" /> 
    </authentication> 

MVC 4 
<machineKey compatibilityMode="Framework45" decryption="AES" validation="SHA1" decryptionKey="your_key1" validationKey="your_keu2" /> 
    <authentication mode="Forms"> 
    <forms name="_authcookie" domain=".domain.com" defaultUrl="~/" timeout="30" path="/" protection="All" slidingExpiration="true" enableCrossAppRedirects="true" /> 
    </authentication> 

爲兼容模式可能的值:

http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx