Я ищу метод или поисковые фильтры, которые могут помочь мне получить информацию об атрибутах схемы объекта пользователя из активного каталога по 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;
}