Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.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
重置IIS后发生WIF RTM的奇怪错误_Iis_Single Sign On_Wif - Fatal编程技术网

重置IIS后发生WIF RTM的奇怪错误

重置IIS后发生WIF RTM的奇怪错误,iis,single-sign-on,wif,Iis,Single Sign On,Wif,我使用IIS 7.5在windows server 2008上托管我的web应用程序, 我有两个web应用程序: 1.第一个是具有登录页面的核心sso(单点登录)服务。 2.另一个web应用程序托管在使用第一个sso应用程序的同一web服务器上 我正在使用WIF RTM来实现sso 通常,它运行良好,没有任何问题,用户可以登录抛出sso并重定向回起始页。 但是当我登录时,首先抛出sso,然后重新启动IIS,如果我返回到第二个应用程序并刷新页面,我会得到以下错误: “/”应用程序中出现服务器错误。

我使用IIS 7.5在windows server 2008上托管我的web应用程序, 我有两个web应用程序: 1.第一个是具有登录页面的核心sso(单点登录)服务。 2.另一个web应用程序托管在使用第一个sso应用程序的同一web服务器上

我正在使用WIF RTM来实现sso

通常,它运行良好,没有任何问题,用户可以登录抛出sso并重定向回起始页。 但是当我登录时,首先抛出sso,然后重新启动IIS,如果我返回到第二个应用程序并刷新页面,我会得到以下错误:

“/”应用程序中出现服务器错误。 密钥在指定状态下无效,无法使用。 描述:一个未处理的 测试期间发生异常 当前web请求的执行。 请查看堆栈跟踪以了解更多信息 有关错误和位置的信息 它起源于代码

例外情况详情: System.Security.Cryptography.Cryptography异常: 密钥在指定的应用程序中无效 国家

源错误:未处理的异常 在执行的过程中生成 当前的web请求。问询处 关于 可以使用 下面是异常堆栈跟踪

堆栈跟踪:

[加密异常:密钥无效 在指定状态下使用。]
System.Security.Cryptography.ProtectedData.Unprotect(字节[]) encryptedData,字节[]可选熵, 数据保护范围)+425
Microsoft.IdentityModel.Web.ProtectedDataCookietTransform.Decode(字节[]) 编码)+59

[无效操作例外:ID1073:A 发生加密异常时 正在尝试使用解密cookie ProtectedData API(请参见内部 详细信息除外) 使用IIS 7.5,这可能是由于 服务器上的loadUserProfile设置 正在将应用程序池设置为false。] Microsoft.IdentityModel.Web.ProtectedDataCookietTransform.Decode(字节[]) 编码)+151
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(字节[]) cookie,布尔出站)+109
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader 读卡器,SecurityTokenResolver 令牌解析程序)+634
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(字节[]) 令牌,SecurityTokenResolver 令牌解析程序)+105
Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie(字节[]) sessioncokie)+239
Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken)+59
Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticationateRequest(对象 发件人,EventArgs EventArgs)+52
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68 System.Web.HttpApplication.ExecuteTep(IExecutionStep 步骤、布尔值和同步完成) +七十五

________________________________________版本信息:Microsoft.NET 框架版本:2.0.50727.4927; ASP.NET版本:2.0.50727.4927

用户会话是使用SQLServer会话模式存储的,我为此使用了一个特殊的数据库

我已经尝试了很多,但无法在本地计算机(Windows7)上重新处理此问题。
有没有人有过类似的经历?您能告诉我如何解决这个问题吗?

我最终通过将应用程序池用户更改为本地用户来解决这个问题。 问题可能是由于sso托管在64位操作系统上造成的,如果我在32位计算机上托管sso(即使我使用域用户作为应用程序池),则不存在此问题

现在我使用ApplicationPoolIdentity或网络服务,重新启动IIS后异常消失


谢谢大家,我很高兴与大家分享我的解决方案。

当您在Win Server 2008和IIS 7.5上有多个应用程序共享同一个域时,似乎存在某种安全问题

如果您有URL
http://ourdomain.com/app1
http://ourdomain.com/app2
您可以使用WIF登录一个应用程序,但当您访问另一个应用程序时,会出现此错误。这是因为Cookie用于域,但如果它是由app1创建的,则app2无法访问它


因此,解决方案是要么像Aaron那样使用具有访问权限的特定用户,要么像我们那样,在两个不同的域(即
http://app1domain.com/
http://app2domain.com/

这可能是因为您的应用程序池用户没有持久的用户配置文件。要纠正这一点,您只需以该用户的身份运行以下内容:

runas /user:<domain>\<user> cmd
runas/user:\cmd

这将创建配置文件。随后,重新启动IIS后,数据应可解密。

什么是“将两个不同域上的应用程序分离,即和”?如果我使用和,我仍然有这个问题。如果我使用域用户,需要什么样的特殊访问权限?首先,我们使用一个网站(domain.com)和两个虚拟目录app1和app2。我们必须将它们分成两个不同域的网站(app1domain.com和app2domain.com)才能让它正常工作。您可能还需要两个应用程序池。我们从未测试过不同的访问权限或用户,但自从您使用它以来,我认为这是一个有效的解决方案。当然,我曾尝试使用域用户为app1和app2创建两个不同的池,但我仍然遇到问题,如果我使用的域用户是管理员,则与使用ApplicationPoolUser或网络服务相同,我可以说域用户缺少一些访问权限,但我不知道是什么权限。好的,最后,我不得不说,这是因为我用于应用程序池的域用户没有一些必需的访问权限,但我不知道是什么权限。我们能找到谁也给我发一封电子邮件吗