【问题标题】:WindowsPrincipal.IsInRole() not returning the expected resultWindowsPrincipal.IsInRole() 未返回预期结果
【发布时间】:2010-09-22 00:29:18
【问题描述】:

这是我当前的代码:

List<string> rowGroups = GetFileGroups((int)row.Cells["document_security_type"].Value);
bool found = false;
System.Security.Principal.WindowsPrincipal p = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent());

foreach (string group in rowGroups)
{
  if (p.IsInRole(group))
  {
    found = true;
    break;
  }
}

这是几个月前有人完成的,我很难理解为什么它不起作用。该公司最近刚刚从一个域名转移到另一个域名。所以我很好奇 p.IsInRole("String") 函数将使用什么域控制器。我假设无论计算机使用什么,它都会使用默认 DC。

奇怪的是,办公室中运行此程序的计算机可能位于 2 个单独的域中。在List&lt;string&gt; 对象中,我有两个可能的域。因此它可以包含诸如“domainA\groupA”、“domainA\userB”、domainB\groupC 和/或“domainB\userD”之类的项目。

所以我的主要问题是 IsInRole 函数永远不会返回 true。我知道它应该,我什至用 domainA\Domain 用户对其进行了测试,但仍然得到一个错误的返回。

有什么想法吗?更改代码是可能的,但不是想要的。我不是 100% 我什至可以编译它...

【问题讨论】:

    标签: c# security active-directory security-roles iprincipal


    【解决方案1】:

    我必须指出,你真的在​​你的字符串中正确地转义了你的“\”字符吗?和“domainA\\groupA”一样?

    【讨论】:

    • 是的。它以前工作过。它们是来自数据库的字符串,我没有在我的代码中声明它们,所以我不必担心
    【解决方案2】:

    当人们尝试在 Active Directory 中使用 Outlook 电子邮件列表来实现基于角色的安全性时,我发现了一些问题。这些出现在 Active Directory 中,很难与实际的安全组(您可以在 ACL 中引用的安全组等)区分开来。让您的管理员验证您使用的任何组是安全组。

    【讨论】:

    • 他们是组。这些组在主域中工作得很好,但在受信任域中尝试时,它们会失败
    【解决方案3】:

    好吧,要解决这个问题,我只需要专门添加组的每个用户而不是组名。

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2021-05-17
      • 2018-02-19
      • 2018-03-23
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多