.net IIS6&;IIS7形成身份验证兼容性

.net IIS6&;IIS7形成身份验证兼容性,.net,iis,forms-authentication,.net,Iis,Forms Authentication,背景: 我有两个web应用程序,安装在不同的web服务器上,目前都是IIS6。应用程序1(A1-A1.domain.com)使用应用程序2(A2-A2.domain.com)设置的表单验证cookie 在A1 web.config中,我有: <authentication mode="Forms"> <forms name=".ASPXAUTH" domain="domain.com" protection="All" path="/" loginUrl="http://a2

背景:

我有两个web应用程序,安装在不同的web服务器上,目前都是IIS6。应用程序1(A1-A1.domain.com)使用应用程序2(A2-A2.domain.com)设置的表单验证cookie

在A1 web.config中,我有:

<authentication mode="Forms">
<forms name=".ASPXAUTH" domain="domain.com"  protection="All" path="/" loginUrl="http://a2.domain.com/login.aspx" timeout="60" />
</authentication>
<authentication mode="Forms">
<forms name=".ASPXAUTH" domain="domain.com"  protection="All" path="/" loginUrl="login.aspx" timeout="60" />
</authentication>

在A2 web.config中,我有:

<authentication mode="Forms">
<forms name=".ASPXAUTH" domain="domain.com"  protection="All" path="/" loginUrl="http://a2.domain.com/login.aspx" timeout="60" />
</authentication>
<authentication mode="Forms">
<forms name=".ASPXAUTH" domain="domain.com"  protection="All" path="/" loginUrl="login.aspx" timeout="60" />
</authentication>

这两个应用程序还在web.config中共享machineKey值

这项功能运行完美,没有任何问题。

问题:

我正在升级A1以使用.NET4.0并在IIS7中运行,现在共享表单身份验证不起作用。我仍然被重定向到A2上的正确登录页面,我可以看到它设置了身份验证cookie,但当我返回A1时,身份验证失败,出现以下错误(来自事件查看器):

表单对请求的身份验证失败。原因:提供的票证无效

我试过:

  • 在IIS6中设置A1的升级版本(这起到了作用-因此IIS6中不同.NET版本的表单验证之间没有兼容性问题)

  • 使用本地登录页面在IIS7中设置升级的A1,即将登录页面从A2复制到A1,并设置A1 loginUrl=“login.aspx”(也适用)

这让我猜测,在IIS6站点下创建的auth cookie用于对IIS7站点下的用户进行身份验证,会导致一些兼容性问题


有人知道如何解决这个问题吗?

在.NET 4.0中,身份验证票据的加密方式已经改变。如果希望与旧版本兼容,可以如下设置
ticketCompatibilityMode
属性:

<forms 
    loginUrl="/Login.aspx" 
    timeout="2880" 
    ticketCompatibilityMode="Framework20"
    domain="domain.com"
/>


谢谢,但不幸的是,这不起作用。我认为我没有看到2.0和4.0之间存在任何兼容性问题,因为我已经在IIS6中的A1与A2设置在同一台服务器上(但使用不同版本的.NET),并发现这是可行的。它唯一不起作用的时间是它跨两台服务器时,一台使用IIS6,另一台使用IIS7,无论.NET版本如何。身份验证cookie不是由IIS创建的,而是由ASP.NET创建的。所以这可能不起作用的原因要么是因为你没有相同的机器钥匙,.NET 4.0中的
ticketCompatibilityMode
,最后是Microsoft发布的关于ASP.NET中Oracle Padding漏洞的最新修补程序:如果只在一台服务器上安装,而不在另一台服务器上安装,则可能会造成问题。在我的本地计算机上安装安全修补程序似乎成功了。阅读有关ticketCompatibilityMode的信息,这似乎会对cookie过期时间产生影响,所以我也会将其保留在那里。谢谢你,达林!