[英]asp.net single sign on not working
代码发布后,我们两个站点之间的单点登录停止了工作。 两个站点都在同一域的不同子域上运行。 子域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工作正常,直到今天早上。 我不确定代码发布到底发生了什么变化,并且在解决问题时遇到了问题。 这两个应用程序当前正在不同的应用程序池上运行(一个是x是.net 4.0,而y是.net 2.0),当我将它们切换到使用相同的应用程序池时,SSO工作。 但是,这不是一个选项,因为其他站点中使用的库之一只能在.NET 2.0上运行。 我还尝试在顶级和网站级别的IIS7管理器中强制执行机器和解密密钥以及验证和解密算法,但没有成功。
在转到x.domain.com后尝试访问y.domain.com时,浏览器会重定向回登录页面,并且事件日志中会出现以下异常:
请求的表单身份验证失败。 原因:提供的票证无效。
有任何想法吗?
这是通过获取Windows和/或.NET的补丁/修补程序来解决的。 特别:
你怀疑配置也发生了变化吗? 因为你真的需要在表单部分:
enableCrossAppRedirects="true"
编辑:还要确保他们使用相同的加密密钥:
<system.web>
<machineKey validationKey="BLAHBLAHBLAHBLAH" decryptionKey="BLAHBLAHBLAH" validation="SHA1" decryption="AES"/>
</system.web>
听起来重定向工作正常,并且在尝试读取票证时会抛出错误。
我有这个工作将以下内容添加到4.0网站,在配置标记内的web.config
:
<appSettings>
<add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />
<add key="aspnet:UseLegacyEncryption" value="true" />
<add key="aspnet:UseLegacyMachineKeyEncryption" value="true" />
</appSettings>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.