我一直在使用 WindowsPrincipal.IsInRole(string) 来检查用户是否可以访问某些控制器功能并且一切运行良好。一项新要求意味着来自第二个域的用户需要访问 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");
非常感谢您的帮助。