【问题标题】:Forms based authentication not working between .Net 2.0 and .Net 4.0 application基于表单的身份验证在 .Net 2.0 和 .Net 4.0 应用程序之间不起作用
【发布时间】:2012-02-15 15:06:38
【问题描述】:

我有几个 Web 应用程序在带有 IIS 6.0 的 Windows Server 2003 上运行。

应用程序在 Asp.net 2.0 下运行。

最近我安装了一个 MVC 3 Web 应用程序,它本质上是基于 asp.net 4 的。在此新应用程序中无法识别表单票证。

我在使用此链接创建的不同 asp.net 版本的 machine.config 文件中具有相同的 machineKey 设置:http://aspnetresources.com/tools/machineKey

登录Web应用程序中的配置是这样的:

  <authentication mode="Forms">
    <forms name=".WEBAUTH"
         loginUrl="login.aspx"
         protection="None"
         slidingExpiration="true"
         enableCrossAppRedirects="false"     
         timeout="43200"     
         path="/" />
  </authentication>

相应地,mvc 应用程序的配置是:

  <authentication mode="Forms">
    <forms name=".WEBAUTH"
         loginUrl="http://path2theloginapp/login.aspx"
         protection="None"
         slidingExpiration="true"
         enableCrossAppRedirects="false"     
         timeout="43200"     
         path="/" />
  </authentication>

  <authorization>
    <deny users="?" />
    <allow users="*" />
  </authorization>

登录有效,但 mvc 应用程序总是重定向回登录页面。

现在,如果我将 IIS 配置中登录 Web 应用程序的 asp.net 版本更改为 asp.net 4.0,它可以工作。但是在 asp.net 2 上运行的所有其他应用程序都不再工作了。

有没有人在类似情况下解决过基于表单的身份验证?

【问题讨论】:

    标签: asp.net iis authentication


    【解决方案1】:

    我不得不走很长一段路,向 Microsoft 提出了一个支持案例。

    事实证明,微软安全公告 MS11-100 中的相关安全更新缺失:

    http://technet.microsoft.com/en-us/security/bulletin/ms11-100.
    选择您的操作系统并安装 .Net 2.0 和 4.0 的更新。

    这会更新固定的基于表单的身份验证,而无需重新配置相关的 Web 应用程序。

    【讨论】:

      【解决方案2】:

      它是 ASP.NET 4.0 中的breaking changes 之一:

      默认哈希算法现在是 HMACSHA256

      ASP.NET 使用加密和散列算法来帮助保护 表单身份验证 cookie 和视图状态等数据。默认情况下, ASP.NET 4 现在使用 HMACSHA256 算法进行哈希运算 cookie 和视图状态。早期版本的 ASP.NET 使用较旧的 HMACSHA1 算法。

      如果您运行混合的 ASP.NET,您的应用程序可能会受到影响 2.0/ASP.NET 4 环境,其中表单身份验证 cookie 等数据必须跨 .NET Framework 版本工作。配置一个 ASP.NET 4 Web 应用程序使用旧的 HMACSHA1 算法,添加 Web.config 文件中的以下设置:

      &lt;machineKey validation="SHA1" /&gt;

      【讨论】:

      • 验证按照您在 machine.config 中的建议进行设置。如果我让 Web 应用程序和应用程序池在 asp.net 2.0 模式下运行,它可以工作吗?
      • @MS007,不,您不能在 CLR 2.0 下运行 ASP.NET MVC 3 应用程序。它需要 .NET 4.0。另一方面,您可以让您的遗留应用程序在 .NET 4.0 下运行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      相关资源
      最近更新 更多