Я заметил интересное поведение при попытке подключиться к edirectory с помощью DirectoryServices.
Это код, который я использовал для извлечения информации из нашего каталога разработки, но я заметил, что он извлекает информацию из нашего производственного каталога Active Directory (из того, что я читал, DirectorySearcher можно использовать и в edir):
string devIP = "xxx.xxx.xxx.xxx:636";
DirectorySearcher directorySearcher = new DirectorySearcher(devIP);
directorySearcher.Filter = "(&(objectClass=user)(uid=" + "jsmith" + "))";
SearchResultCollection searchResults = directorySearcher.FindAll();
(Я знаю, что он попадает в производство, потому что jsmith не существует в dev. Еще одна вещь, которую я заметил, это то, что возвращаемые атрибуты являются атрибутами AD, такими как memberOf и т. д.)
Что, наконец, заставило его работать, так это использование System.DirectoryServices.Protocols:
LdapConnection con = new LdapConnection(new LdapDirectoryIdentifier("d1.domain.com:636"));
con.Credential = new NetworkCredential("cn=USERNAME,ou=XXX,o=XXX", "password");
con.SessionOptions.SecureSocketLayer = true;
con.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback(ServerCallback);
con.AuthType = AuthType.Basic;
using (con)
{
con.Bind();
}
Я провел некоторое исследование, но не мог понять, почему DirectorySearcher перенаправлялся в prod, хотя я явно указал IP-адрес и имя пользователя?
Сервер разработки находится в домене, отличном от моего локального компьютера (и я запускаю код на своем локальном компьютере). Возможно ли, что, поскольку моя машина находится в том же домене, что и prod, по умолчанию она использует Prod Active Directory и просто игнорирует devIP, который я передаю?