【问题标题】:Retrieve a users group membership from LDAP with a second user with read-only access使用具有只读访问权限的第二个用户从 LDAP 检索用户组成员身份
【发布时间】:2026-01-11 11:10:02
【问题描述】:

我有一个功能需要以对 AD LDAP 具有只读访问权限的查询用户身份登录 LDAP。

我能够查询和查找用户并枚举除 memberOf 之外的大多数用户属性。

这仅在我以只读用户身份登录时发生。如果我以相关用户身份登录,则可以检索所有属性。有人知道我做错了什么吗?

DirectorySearcher search = new DirectorySearcher(entry);

search.Filter = "(sAMAccountName=" + loginName + ")";
search.PropertiesToLoad.Add("CN");
search.PropertiesToLoad.Add("memberOf");
search.PropertiesToLoad.Add("SN");
search.PropertiesToLoad.Add("givenName");
if (_Attributes != null)
{
    foreach (string attr in _Attributes)
    {
        search.PropertiesToLoad.Add(attr);
    }
}

SearchResult result = search.FindOne();

if (result == null)
    return null;

string usersName = "";
if (result.Properties.Count > 0)
{
    if (result.Properties.Contains("CN"))
    {
        attributes.Add("CN", result.Properties["CN"].Cast<string>().ToList());
        usersName = result.Properties["CN"].Cast<string>().FirstOrDefault();
    }
    if (result.Properties.Contains("SN"))
    {
        attributes.Add("SN", result.Properties["SN"].Cast<string>().ToList());
    }
    if (result.Properties.Contains("givenName"))
    {
        attributes.Add("givenName",     result.Properties["givenName"].Cast<string>.ToList());
    }
    if (result.Properties.Contains("memberOf"))
        ad_MemberOf = result.Properties["memberOf"].Cast<string>().ToList();
    }
}

【问题讨论】:

    标签: c# active-directory ldap directorysearcher


    【解决方案1】:

    这是一项安全功能。如果您没有启用“Pre-Windows 2000 Compatible Access”,则对该属性的访问受到限制。

    如果您在域的根级别正确启用此功能,您应该可以访问所有用户帐户的所有“memberOf”属性,以及在您没有正确权限时受到限制的一些其他属性供访问。

    或者,您可以添加权限以访问与作为“Windows 2000 之前的兼容访问”机制的一部分提供的属性相对应的特定属性。

    如果我没看错,你需要添加的权限是:

    'List Contents', 'Read All Properties' and 'Read Permissions'
    

    【讨论】:

      最近更新 更多