在IIS6上使用WIF时出现问题

时间:2010-09-27 20:46:08

标签: asp.net-mvc-2 iis-6 wif

我们在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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

  

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

loadUserProfile and IIS7

所以看起来IIS6默认情况下不应该锁定临时目录。我想知道你的主机是否因为同样的原因将其锁定了。

答案 2 :(得分:0)

您可以使用RSA而不是DPAPI来保护会话令牌,从而满足用户配置文件的需求。对于所有部署而言,这是最佳实践,但特别是对于负载平衡(以及在企业中谁没有负载平衡?)

多米尼克·拜尔(Dominick Baier)写了一些关于此的内容: http://leastprivilege.com/2010/02/19/wcf-wif-and-load-balancing-and-a-bit-of-azure/

答案 3 :(得分:0)

我在一个服务器上遇到了这个例外,我有一个有效的帐户但从未使用它登录过它。用户在AD上,这是可能的。除了以用户身份登录之外,我几乎尝试了所有内容。我终于想到了这样做,它就像一个魅力。