重置IIS后发生WIF RTM的奇怪错误
我使用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请求。问询处 关于 可以使用 下面是异常堆栈跟踪 堆栈跟踪: [加密异常:密钥无效 在指定状态下使用。]重置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,如果我返回到第二个应用程序并刷新页面,我会得到以下错误: “/”应用程序中出现服务器错误。
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或网络服务相同,我可以说域用户缺少一些访问权限,但我不知道是什么权限。好的,最后,我不得不说,这是因为我用于应用程序池的域用户没有一些必需的访问权限,但我不知道是什么权限。我们能找到谁也给我发一封电子邮件吗