3

我有一个 ASP.NET 应用程序,它将身份验证 cookie 发送到 ASP.NET MVC 应用程序,用作后台应用程序。

我添加了一个全局过滤器,用于检查身份验证 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)                 {

另一方面,我可以Application_BeginRequest在 Global.asax 文件中看到从 ASP.NET 应用程序发送的 cookie。

cookie 在哪里以及为什么消失了?cookie 在 MVC 请求处理管道的哪个部分被丢弃?

  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 ...
        }  
4

1 回答 1

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

于 2013-06-27T03:34:20.650 回答