IIS6& IIS7形成auth兼容性

时间:2010-11-25 11:02:55

标签: .net iis forms-authentication

背景

我有两个Web应用程序,设置在不同的Web服务器上,目前这两个服务器都是IIS6。应用程序1(A1 - a1.domain.com)使用应用程序2(A2 - a2.domain.com)设置的表单auth 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>

在A2 web.config中我有:

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

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

这完美无缺。

问题:

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

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

我试过了:

  • 在IIS6中设置A1的升级版本(这很有效 - 因此IIS6中不同.NET版本的表单auth之间没有兼容性问题)

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

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

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

1 个答案:

答案 0 :(得分:2)

在.NET 4.0中,身份验证票证的加密方式已发生变化。如果您想与旧版本兼容,可以像这样设置ticketCompatibilityMode属性:

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