2012-11-12 64 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