我在带有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上运行的所有其他应用程序都不再适用。
是否有人在类似情况下解决了基于表单的身份验证?
答案 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" />