У меня есть клиент, использующий службу Windows, которую я написал, которая опрашивает указанный сервер LDAP Active Directory для пользователей в указанных группах на этом сервере LDAP.
Как только он находит пользователя, он заполняет информацию о пользователе (например, имя пользователя, адрес электронной почты и т. Д.) И пытается получить домен пользователя на этом сервере LDAP.
Когда я пытаюсь получить домен пользователя для этого конкретного клиента, я получаю исключение DirectoryServicesCOMException: Ошибка входа в систему: неизвестное имя пользователя или неверный пароль. Это исключение возникает, когда я пытаюсь сослаться на свойство создаваемого мной объекта RootDSE DirectoryEntry.
У этого клиента есть лес с двумя корнями, настроенный следующим образом.
Домены и доверие Active Directory
ktregression.com
ktregression.root
Я предполагаю, что проблема в этом. Есть ли способ обойти это? Есть ли способ по-прежнему получить имя netbios определенного объекта домена, не сталкиваясь с этим исключением?
Вот пример кода, указывающего на настройку тестового сервера AD, как описано ранее:
string domainNameLdap = "dc=tempe,dc=ktregression,dc=com";
DirectoryEntry RootDSE = new DirectoryEntry (@"LDAP://10.32.16.6/RootDSE");
DirectoryEntry servers2 = new DirectoryEntry (@"LDAP://cn=Partitions," + RootDSE.Properties["configurationNamingContext"].Value ); //*****THIS IS WHERE THE EXCEPTION IS THROWN********
//Iterate through the cross references collection in the Partitions container
DirectorySearcher clsDS = new DirectorySearcher(servers2);
clsDS.Filter = "(&(objectCategory=crossRef)(ncName=" + domainNameLdap + "))";
clsDS.SearchScope = SearchScope.Subtree;
clsDS.PropertiesToLoad.Add("nETBIOSName");
List<string> bnames = new List<string>();
foreach (SearchResult result in clsDS.FindAll() )
bnames.Add(result.Properties["nETBIOSName"][0].ToString());
RootDSE.Properties["configurationNamingContext"].Value
возвращает значение, которое на самом деле не является нулевым, либо соответствует номенклатуре LDAPLDAP://CN=Partitions,DC=ktregression,DC=com
или тому подобное? - person Will Marcouiller   schedule 23.11.2010DirectoryEntry
, который будет представлять каждый из ваших корней, и работать с ними? - person Will Marcouiller   schedule 23.11.2010DirectoryEntry
. - person Will Marcouiller   schedule 23.11.2010DirectoryEntry
в вашем примере кода, тогда это будет использовать текущего пользователя, вошедшего в систему. Использование олицетворения заставит AD пройти аутентификацию с указанным именем пользователя и паролем. Для этого вы должны передать их в параметрах конструктора. - person Will Marcouiller   schedule 23.11.2010