Можно ли использовать LdapConnection из System.DirectoryServices.Protocols для запроса Active Directory?
У меня проблемы с созданием PrincipalContext. Вот мой код, на случай, если кто-нибудь сможет определить проблему:
private LdapConnection getLdapConnection(string username, string password, string ldapServer, bool secured)
{
int port = secured ? 636 : 389;
LdapConnection connection = new LdapConnection(new LdapDirectoryIdentifier(ldapServer, port, false, false));
if (secured)
{
connection.SessionOptions.ProtocolVersion = 3;
connection.SessionOptions.SecureSocketLayer = true;
}
connection.Credential = new NetworkCredential(username, password);
connection.AuthType = AuthType.Basic;
connection.SessionOptions.VerifyServerCertificate += (conn, cert) => { return true; };
connection.Bind();
return connection;
}
При попытке создать экземпляр основного контекста, который я использую
PrincipalContext context = new PrincipalContext(
ContextType.Domain,
ldapServer,
null,
useSsl ? ContextOptions.SecureSocketLayer | ContextOptions.SimpleBind : ContextOptions.SimpleBind,
username,
password);
Я передаю те же значения, для полноты имени пользователя в формате domain\user
и ldapServer в формате server.domain.com
с ldapServer, добавив: 636 при создании основного контекста. *
Сервер, к которому я подключаюсь, имеет проблемы с сертификатами, которые, я полагаю, могли бы предотвратить это, так как LdapConnection настроен на возврат true для проверки. Это не проблема, так как ей доверяют. У меня нет доступа к серверу, и я не могу это изменить.