Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net单点登录不工作_Asp.net_Iis 7_Forms Authentication_Single Sign On - Fatal编程技术网

asp.net单点登录不工作

asp.net单点登录不工作,asp.net,iis-7,forms-authentication,single-sign-on,Asp.net,Iis 7,Forms Authentication,Single Sign On,代码发布后,我们两个站点之间的单点登录停止工作。两个站点都运行在同一域的不同子域上。子域x被用作所有其他应用程序的登录服务器。我不明白为什么会这样。在web.config中,两个站点的计算机密钥和解密密钥相同。验证设置为SHA1,解密设置为AES。身份验证配置如下所示: X: Y: 直到今天早上,SSO一直工作正常。我不确定代码发布后到底发生了什么变化,我在解决这个问题时遇到了一些问题。这两个应用程序当前运行在不同的应用程序池上(一个是x是.net 4.0,而y是.net 2.0),当我

代码发布后,我们两个站点之间的单点登录停止工作。两个站点都运行在同一域的不同子域上。子域x被用作所有其他应用程序的登录服务器。我不明白为什么会这样。在web.config中,两个站点的计算机密钥和解密密钥相同。验证设置为SHA1,解密设置为AES。身份验证配置如下所示:

X:


Y:


直到今天早上,SSO一直工作正常。我不确定代码发布后到底发生了什么变化,我在解决这个问题时遇到了一些问题。这两个应用程序当前运行在不同的应用程序池上(一个是x是.net 4.0,而y是.net 2.0),当我将它们切换到使用相同的应用程序池时,SSO工作了。但是,这不是一个选项,因为另一个站点中使用的库之一仅在.NET 2.0上运行。我还尝试在IIS7管理器的顶层和网站层强制使用机器和解密密钥以及验证和解密算法,但没有成功

在转到x.domain.com后尝试转到y.domain.com时,浏览器将重定向回登录页面,事件日志中出现以下异常:

表单的窗体身份验证失败 要求原因:提供的车票 这是无效的


有什么想法吗?

您是否怀疑配置也发生了变化?因为您在表单部分中确实需要:

enableCrossAppRedirects="true"
编辑:还要确保它们使用相同的加密密钥:

<system.web>
   <machineKey validationKey="BLAHBLAHBLAHBLAH" decryptionKey="BLAHBLAHBLAH" validation="SHA1" decryption="AES"/>
</system.web>


听起来重定向工作正常,在尝试读取票证时抛出了一个错误。

我在
web.config
内部配置标记中将以下内容添加到4.0网站时得到了此工作:

  <appSettings>
    <add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />
    <add key="aspnet:UseLegacyEncryption" value="true" />
    <add key="aspnet:UseLegacyMachineKeyEncryption" value="true" />
  </appSettings>

通过在Windows和/或.NET上安装补丁/修补程序解决了这一问题。具体而言:

  • KB2518870
  • KB2656351
  • KB2572078
  • KB2633870

你没有提到什么是症状?到底是什么不起作用?应用程序池以什么身份运行?另外,库要求它在2.0上运行,这又如何呢?很抱歉,回复太晚了。不幸的是,这似乎没有起作用。我将其添加到两个应用程序的web.config.Ok中,那么具体的符号是什么?恐怕需要mroe信息。原始帖子经过编辑以显示症状。框架没有在单独的应用程序池下接受域cookie(就像它应该接受的那样),而是将上述异常记录在事件日志中,IIS将用户重定向回“确定”状态,听起来它可能在解密时遇到问题。我将更新我的答案。它们使用相同的加密密钥、验证密钥、验证方法和解密方法。如果我将两个应用程序设置为使用同一个应用程序池,那么一切都会顺利进行。但它们不能在同一个应用程序池中,因为一个应用程序需要.NET 2.0,另一个应用程序需要.NET 4.0。我在不同的网站上发现了更多的论坛帖子,这些帖子似乎有相同的问题,但我还没有找到解决办法。
<system.web>
   <machineKey validationKey="BLAHBLAHBLAHBLAH" decryptionKey="BLAHBLAHBLAH" validation="SHA1" decryption="AES"/>
</system.web>
  <appSettings>
    <add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />
    <add key="aspnet:UseLegacyEncryption" value="true" />
    <add key="aspnet:UseLegacyMachineKeyEncryption" value="true" />
  </appSettings>