Информация о схеме LdapConnection Active Directory для объекта пользователя - PullRequest
1 голос
/ 04 мая 2019

Я ищу метод или поисковые фильтры, которые могут помочь мне получить информацию об атрибутах схемы объекта пользователя из активного каталога по SSL.

Я использую класс LdapConnection для подключения к серверу. Легко получить аутентификацию на сервере.

Вот код для аутентификации:

public bool Authenticate(string password)
{
        try
        {
            var credential = new NetworkCredential(UserName, password, Domain);
            var ldapServer = Domain;
            var ldapConnection = new LdapConnection(ldapServer);
            ldapConnection.Bind(credential);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            return false;
        }

        return false;
}

Возвращает результат успеха.

Мои требования - получить все атрибуты схемы пользовательского объекта, присутствующего в Active Directory, с помощью LdapConnection поискового запроса.

DirectoryEntry или PrincipalContext легко получить информацию о схеме, но в моем случае мне нужна вся информация только для LdapConnection класса.

Вот как я ищу пользователя, но это метод для получения информации о пользователе. Мне нужна только информация о схеме, и этот метод возвращает только тот атрибут, который имеет значение.

LdapConnection connection = new LdapConnection(ldapServer);
connection.SessionOptions.SecureSocketLayer = true;
connection.SessionOptions.VerifyServerCertificate = (ldapConnection, certificate) => true;
connection.AuthType = AuthType.Negotiate;

NetworkCredential credential = new NetworkCredential(username, password);
connection.Credential = credential;
connection.Bind();

string filter = string.Format(CultureInfo.InvariantCulture, "(&(objectClass=user)(objectCategory=user) (sAMAccountName={0}))", LdapEncode(username));
var attributes = new[] { "sAMAccountName", "displayName", "mail" };

SearchRequest searchRequest = new SearchRequest(baseDn, filter, SearchScope.Subtree, attributes);

var searchResponse = (SearchResponse)connection.SendRequest(searchRequest);

if (searchResponse?.ResultCode == ResultCode.Success)
{
    var entry = searchResponse.Entries[0];
    var model = new LdapUserModel
                {
                    Identity = GetStringValue(entry, "sAMAccountName"),
                    Email = GetStringValue(entry, "mail"),
                    Username = GetStringValue(entry, "sAMAccountName"),
                };

    return model;
}
...