无法获取用户的域成员组列表

Unable to get the list of domain member group for the user

我正在使用下面的 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;
            }
        }
    }
}

如果我弄错了请告诉我。 我只能看到一个目的,return bool? 顺便说一句,即使不是这种情况,请尝试删除 break;

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))
            {
                //your stuff here (assign vars, values etc)
                bReturn = true; // <-- 
            }
        }
    }
}

因为根据您使用的逻辑,如果它满足一个条件,它将停止循环。

使用 IsMemberOf 方法代替循环:

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

可能 适合你。但请记住,只有当该组列在用户的 memberOf 属性中时,此方法(以及您的循环方法)才会起作用。如果:

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

那就不行了

我在我的网站上写的一篇文章中谈到了这一点:Find out if one user is a member of a group

由于权限问题,C# 代码无法获取 AD 成员详细信息。 我已经使用 net group "<GroupName>" 获取作为组一部分的用户列表,然后在列表中检查所需的用户。

验证用户是否为所需组的成员是另一种选择。