0

我有一个功能需要以对 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();
    }
}
4

1 回答 1

1

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

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

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

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

'List Contents', 'Read All Properties' and 'Read Permissions'
于 2012-10-17T17:51:44.203 回答