我尝试使用WindowsTokenRoleProvider保护ASP.NET应用程序时遇到了真的令人沮丧的错误。对于特定用户,我看到抛出以下ProviderException:
API failed due to error 'Catastrophic failure
正如我所说,这似乎只发生在特定用户身上,我似乎能够很好地访问该网站,因此有几位同事。我们与失败用户之间的唯一区别是,他们不是托管网站的框架上的管理员。
从GetRolesForUser调用。从MSDN documentation开始,它表明这可能是由于以下原因:
我怀疑问题可能与第3点有关,因为我已经设法在Visual Studio 2008中使用.NET Framework调试功能来调试代码,而且似乎调用失败:
UnsafeNativeMethods.GetGroupsForUser
我无法理解的是为什么!如果调用在Framework库中失败,那么我不能完全确定如何解决该问题。
我会收到任何关于此的帮助或建议,因为我不知道从哪里开始,我正在认真考虑使用角色提供程序代替其他一些不太优雅的方法。
答案 0 :(得分:0)
好的,经过Microsoft ADC的一些非常有用的输入后,我设法解决了这个问题。
对UnsafeNativeMethods.GetGroupsForUser的调用应返回特定用户有权访问的所有 AD组的列表(这是递归的,因此也将包括父组等)。在域之间迁移AD配置文件时,似乎有时,用户最终会得到一个指向没有与之关联的名称的组的错误SID。因为调用尝试获取特定配置文件的所有SID名称,所以当它到达空条目时会失败,导致上面的(相当无用的)“灾难性故障”错误。
作为参考,该组在whoami命令行工具的转储中显示如下(其他组,SID和域名被屏蔽):
DOMAIN\ Deleted account S-1-2-34-123456789-123456789-123456789-12345 Mandatory group, Enabled by default, Enabled group
如您所见,域名存在,但组不存在。解决方案是让域管理员从用户的个人资料中删除该条目。
我真的希望这个可以帮助其他人解决这个问题,因为它让我完全 flummoxed!