背景
我有两个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会导致一些兼容性问题。
有谁知道如何解决这个问题?
答案 0 :(得分:2)
在.NET 4.0中,身份验证票证的加密方式已发生变化。如果您想与旧版本兼容,可以像这样设置ticketCompatibilityMode
属性:
<forms
loginUrl="/Login.aspx"
timeout="2880"
ticketCompatibilityMode="Framework20"
domain="domain.com"
/>