C# User.IsInRole(字符串)和多个域

C# User.IsInRole(字符串)和多个域,c#,asp.net-mvc,windows-principal,C#,Asp.net Mvc,Windows Principal,我一直在使用WindowsPrincipal.IsInRole(字符串)检查用户是否有权访问某些控制器功能,并且所有这些功能都运行良好。新的要求意味着来自第二个域的用户需要访问intranet站点,因此在第二个域中创建匹配的广告组,并将这些用户分配给这些组 这些用户可以连接,但他们的访问是断断续续的——有时他们的视图受到限制,有时则没有。有人指出,当用户从原始域连接时,他们似乎失去了对受限视图的所有访问权限 原始代码看起来有点像这样(注意没有域前缀): 最初来自AD1\GroupName1的用户

我一直在使用WindowsPrincipal.IsInRole(字符串)检查用户是否有权访问某些控制器功能,并且所有这些功能都运行良好。新的要求意味着来自第二个域的用户需要访问intranet站点,因此在第二个域中创建匹配的广告组,并将这些用户分配给这些组

这些用户可以连接,但他们的访问是断断续续的——有时他们的视图受到限制,有时则没有。有人指出,当用户从原始域连接时,他们似乎失去了对受限视图的所有访问权限

原始代码看起来有点像这样(注意没有域前缀):

最初来自AD1\GroupName1的用户获得了视图GroupName1,但一旦来自AD2\GroupName1的用户连接,原始用户就获得了GroupNameNone视图。当人们连接/断开连接时,通过检查的用户似乎发生了变化

所以我的问题是这里发生了什么?是否正在查找组名并在后台缓存SID(或类似)?这似乎是合适的,因为缓存的SID会随着来自不同域的用户的连接而改变

我还假设(但尚未测试)在检查前加上域前缀(如下所示)将解决问题,是否有人对此有意见,或者我们是否需要在不同的域中创建不同名称的广告组

域特定代码:

        if (User.IsInRole(@"AD1\GroupName1") || User.IsInRole(@"AD2\GroupName1"))
        {
            return View("GroupName1");
        }

        if (User.IsInRole(@"AD1\GroupName2") User.IsInRole(@"AD2\GroupName2"))
        {
            return View("GroupName2");    
        }

        return View("GroupNameNone");

非常感谢您的帮助。

您解决过这个问题吗?我在两个域中看到了类似的行为,在互联网上似乎没有人修复过它!
        if (User.IsInRole(@"AD1\GroupName1") || User.IsInRole(@"AD2\GroupName1"))
        {
            return View("GroupName1");
        }

        if (User.IsInRole(@"AD1\GroupName2") User.IsInRole(@"AD2\GroupName2"))
        {
            return View("GroupName2");    
        }

        return View("GroupNameNone");