Asp.net mvc 2 将WIF与IIS6一起使用时出现问题

Asp.net mvc 2 将WIF与IIS6一起使用时出现问题,asp.net-mvc-2,iis-6,wif,Asp.net Mvc 2,Iis 6,Wif,在IIS 6上使用SessionAuthenticationModule时出现问题,尝试访问应用程序时,出现以下异常: 数据保护操作失败。这可能是由于没有为当前线程的用户上下文加载用户配置文件造成的,这可能是线程正在模拟的情况 我已经能够解决的是,有可能启用IIS 7中的配置文件,但我们的托管公司使用IIS 6有什么办法吗?尝试一下,还是简单的想法 堆栈跟踪: [CryptographicException: The data protection operation was unsuccess

在IIS 6上使用SessionAuthenticationModule时出现问题,尝试访问应用程序时,出现以下异常:

数据保护操作失败。这可能是由于没有为当前线程的用户上下文加载用户配置文件造成的,这可能是线程正在模拟的情况

我已经能够解决的是,有可能启用IIS 7中的配置文件,但我们的托管公司使用IIS 6有什么办法吗?尝试一下,还是简单的想法

堆栈跟踪:

[CryptographicException: The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread's user context, which may be the case when the thread is impersonating.]
    System.Security.Cryptography.ProtectedData.Protect(Byte[] userData, Byte[] optionalEntropy, DataProtectionScope scope) +456
    Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(Byte[] value) +54

[InvalidOperationException: ID1074: A CryptographicException occurred when attempting to encrypt the cookie using the ProtectedData API (see inner exception for details). If you are using IIS 7.5, this could be due to the loadUserProfile setting on the Application Pool being set to false. ]
    Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(Byte[] value) +146
    Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte[] cookie, Boolean outbound) +47
    Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(XmlWriter writer, SecurityToken token) +470
    Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.WriteToken(SessionSecurityToken sessionToken) +89
    Microsoft.IdentityModel.Web.SessionAuthenticationModule.WriteSessionTokenToCookie(SessionSecurityToken sessionToken) +123

我在本地IIS7服务器上遇到了同样的问题,并通过在应用程序池中将loadUserProfile设置为true解决了这个问题。我发现关于IIS6的以下内容:

对于IIS6,所有工作进程(无论配置了哪个进程标识)都将C:\windows\temp用作临时目录。更具体地说,默认情况下,没有一个工作进程加载其“用户配置文件”,导致所有工作进程都使用c:\windows\temp作为临时目录。Windows允许所有用户读取/写入/创建此目录上的权限,从而允许“正常工作”。这样做的负面影响是,默认情况下,所有应用程序池都有效地共享同一个临时目录,这可能导致跨应用程序池的信息泄露。 使用IIS7,我们选择了一个更安全的默认值,现在为所有应用程序池默认加载用户配置文件


所以IIS6在默认情况下不应该锁定临时目录。我想知道你的主人是否出于同样的原因锁定了它。

我在本地IIS7服务器上遇到了同样的问题,并通过在应用程序池中将loadUserProfile设置为true来解决。我发现关于IIS6的以下内容:

对于IIS6,所有工作进程(无论配置了哪个进程标识)都将C:\windows\temp用作临时目录。更具体地说,默认情况下,没有一个工作进程加载其“用户配置文件”,导致所有工作进程都使用c:\windows\temp作为临时目录。Windows允许所有用户读取/写入/创建此目录上的权限,从而允许“正常工作”。这样做的负面影响是,默认情况下,所有应用程序池都有效地共享同一个临时目录,这可能导致跨应用程序池的信息泄露。 使用IIS7,我们选择了一个更安全的默认值,现在为所有应用程序池默认加载用户配置文件


所以IIS6在默认情况下不应该锁定临时目录。我想知道您的主机是否出于同样的原因将其锁定。

在您的web服务上创建虚拟窗口服务并安装窗口服务,并将其登录帐户更改为与您的web应用程序池帐户相同。这应该可以工作

创建虚拟窗口服务,在web服务上安装窗口服务,并将其登录帐户更改为与web应用程序池帐户相同。这应该行得通

通过使用RSA而不是DPAPI来保护会话令牌,您可以绕过对用户配置文件的需求。事实上,这是所有部署的最佳实践,尤其是对于负载平衡的部署(在企业中谁不是负载平衡的?)

Dominick Baier写了一点关于这个的东西:

通过使用RSA而不是DPAPI来保护会话令牌,您可以绕过对用户配置文件的需求。事实上,这是所有部署的最佳实践,尤其是对于负载平衡的部署(在企业中谁不是负载平衡的?)

Dominick Baier写了一点关于这个的东西:

我在一台服务器上得到了这个异常,我有一个有效的帐户,但从未使用该帐户登录。用户在广告上,这就是为什么这成为可能。除了以用户身份登录外,我几乎尝试了所有方法。我终于想到要这么做了,而且效果很好。

我在一个服务器上遇到了这个异常,我有一个有效的帐户,但从未使用该帐户登录。用户在广告上,这就是为什么这成为可能。除了以用户身份登录外,我几乎尝试了所有方法。我终于想到要这么做了,效果很好。

谢谢,我会检查一下是否可行。实际上,由于我的应用程序由外部提供者托管,我们最终实现了一个使用机器密钥的替代令牌处理程序(因此不需要“用户配置文件”)。这不是最佳解决方案,但可以作为临时解决方案。谢谢,我们将检查是否可行。实际上,由于我的应用程序由外部提供者托管,我们最终实现了一个使用机器密钥的替代令牌处理程序(因此不需要“用户配置文件”)。这不是最佳解决方案,但可以作为临时解决方案。