基于表单的身份验证在.Net 2.0和.Net 4.0应用程序之间无效

时间:2012-02-15 15:06:39

标签: asp.net iis authentication

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

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

最近我安装了一个基于asp.net 4的MVC 3 Web应用程序。表单票证未在此新应用程序中重新定位。

我在使用此链接创建的不同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上运行的所有其他应用程序都不再适用。

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

2 个答案:

答案 0 :(得分:5)

我必须走很长的路,并与微软开了一个支持案例。

事实证明,Microsoft安全公告MS11-100的相关安全更新丢失了:

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

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

答案 1 :(得分:2)

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

  

默认哈希算法现在是HMACSHA256

     

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

     

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

     

<machineKey validation="SHA1" />