在一个代码发布后,我们两个网站之间的单点登录停止工作了。这两个网站都运行在同一个域名的不同子域上。子域x被用作所有其他应用程序的登录服务器。我无法完全理解为什么会出现这种情况。在两个网站的web.config中,机器和解密密钥都是相同的。验证设置为SHA1,解密设置为AES。身份验证配置如下:
X:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" protection="All" name="Domain.ASPXAUTH" path="/" domain="domain.com" />
</authentication>
Y:
<authentication mode="Forms">
<forms loginUrl="https://x.domain.com/Account/LogOn" timeout="2880" protection="All" name="Domain.ASPXAUTH" path="/" domain="domain.com" defaultUrl="http://x.domain.com/" />
</authentication>
SSO在今早之前一直正常运行。我不确定代码发布发生了什么变化,现在遇到了问题并且无法解决。两个应用程序当前在不同的应用程序池上运行(一个是.Net 4.0,而另一个是.Net 2.0)。当我将它们切换到使用相同的应用程序池时,SSO起作用了。但是,由于另一个站点中使用的库仅在.NET 2.0上运行,这不是一个选项。我还尝试在IIS7管理器中强制机器、解密密钥以及验证和解密算法,但没有成功。在访问x.domain.com后尝试去y.domain.com时,浏览器会被重定向回登录页面,并在事件日志中看到以下异常:
"Forms authentication failed for the request. Reason: The ticket supplied was invalid."
有什么想法吗?