首页 > 解决方案 > 无法获取用户的域成员组列表

问题描述

我正在使用下面的 C# 代码来检查用户是否是所需域成员组的一部分。

传递的用户名是 3 个成员组的一部分,但代码返回第一个域组成员名称并退出 for 循环。请帮我获取用户的整个域组列表。

bool bReturn = false;
string sDomainName = System.Environment.UserDomainName;
using (PrincipalContext oContext = new     PrincipalContext(ContextType.Domain, sDomainName))
{
if (oContext.ValidateCredentials(sUserName, sPassword))
{
    using (PrincipalSearcher oSearcher = new PrincipalSearcher(new UserPrincipal(oContext)))
    {
        oSearcher.QueryFilter.SamAccountName = sUserName;
        Principal oPrincipal = oSearcher.FindOne();
        foreach (Principal oPrin in oPrincipal.GetGroups())
        {
            if (oPrin.Name.Trim().ToString().Equals(sGroupName))
            {
                bReturn = true;
                break;
            }
        }
    }
}

标签: c#active-directorywindows-server-2008-r2windows-server-2012-r2

解决方案


而不是你的循环,使用IsMemberOf方法:

bReturn = oPrincipal.IsMemberOf(oContext, IdentityType.Name, sGroupName);

可能对你有用。但请记住,这(和您的循环方法)仅memberOf在用户属性中列出该组时才有效。如果:

  1. 您的 AD 林中有多个域,并且
  2. 您正在使用的组是全局或域本地,并且
  3. 该组与用户不在同一个域中

那么它将无法正常工作。

我在我的网站上写的一篇文章中谈到了这一点:找出一个用户是否是组的成员


推荐阅读