Запрос LDAP
Я не работал с LDAP раньше, поэтому я немного растерялся. Мне нужно подключиться к источнику LDAP, найти определенный атрибут и изменить его. Входные данные для программы - файл CSV со списком пользователей. Предполагается, что программа считывает UID из файла CSV, находит запись в LDAP и заменяет определенный атрибут. Я понятия не имею, как это сделать. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста?
3 ответа
@KenL Почти достал меня там. Я также должен был установить AuthenticationType DirectoryEntry, чтобы заставить его работать. Также обратите внимание на то, как вы используете подстановочные знаки ( Kleene Stars).
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://some.ldap.server.com");
rootEntry.AuthenticationType = AuthenticationTypes.None; //Or whatever it need be
DirectorySearcher searcher = new DirectorySearcher(rootEntry);
var queryFormat = "(&(objectClass=user)(objectCategory=person)(|(SAMAccountName=*{0}*)(cn=*{0}*)(gn=*{0}*)(sn=*{0}*)(email=*{0}*)))";
searcher.Filter = string.Format(queryFormat, searchString);
foreach(SearchResult result in searcher.FindAll())
{
Console.WriteLine("account name: {0}", result.Properties["samaccountname"].Count > 0 ? result.Properties["samaccountname"][0] : string.Empty);
Console.WriteLine("common name: {0}", result.Properties["cn"].Count > 0 ? result.Properties["cn"][0] : string.Empty);
}
Первый элемент ответа, используя ADSI (по старинке)
Как сделать почти все (с ADSI) в Active Directory с C#
Второй элемент ответа, начиная с.NET 3.5 Microsoft представляет "Принципал" и "Управление учетными записями".
Как сделать почти все (с AccountManagement) в Active Directory с C#
Третий элемент ответа: вы можете использовать протокол низкого уровня (собственный LDAP) с System.DirectoryServices.Protocols (S.DS.P).
Примечание: Если вас интересует, как запрашивать активный каталог из собственного кода, вы можете взглянуть на API-интерфейс привязки LDAP, как указано в документе RFC 1823, "Поддержите его в Microsoft", см. Стратегию MS для облегченного протокола доступа к каталогам (LDAP). Вы найдете инструкции по использованию и справочные материалы по Microsoft API в протоколе облегченного доступа к каталогам.
Код намного проще, чем вы думаете. Вам необходимо создать соединение с каталогом, настроить поисковик, а затем выполнить поиск по имени свойства.
DirectoryEntry entry = new DirectoryEntry("LDAP://MyDomain.com");
DirectorySearcher dSearch = new DirectorySearcher(entry);
dSearch.Filter = "(&(objectCategory=person)(objectClass=user)(" + SType + "=" + Name + "))";
SType - это тип имени, а Name - фактическое имя пользователя.