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

时间:2016-08-19 15:01:15

标签: c# asp.net-mvc windows-principal

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

这些用户可以连接,但他们的访问是间歇性的 - 有时他们获得了受限制的视图,有时他们没有。有人指出,因为他们连接原始域中的用户似乎失去了对受限制视图的所有访问权。

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

        if (User.IsInRole("GroupName1"))
        {
            return View("GroupName1");
        }

        if (User.IsInRole("GroupName2"))
        {
            return View("GroupName2");    
        }

        return View("GroupNameNone");

最初来自AD1 \ GroupName1的用户获得了GroupName1的视图,但只要连接了AD2 \ GroupName1的用户,原始用户就会使用GroupNameNone视图提供服务。当人们连接/断开用户通过时,支票似乎发生了变化。

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

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

特定于域的代码:

        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");

非常感谢您的帮助。

0 个答案:

没有答案