Запрос LDAP

Я раньше не работал с LDAP, поэтому я немного растерялся. Мне нужно подключиться к источнику LDAP, найти определенный атрибут и изменить его. Входные данные для программы - файл CSV со списком пользователей. Предполагается, что программа считывает UID из файла CSV, находит запись в LDAP и заменяет определенный атрибут. Я понятия не имею, как это сделать. Может ли кто-нибудь направить меня в правильном направлении, пожалуйста?

30 голосов | спросил Graeme 23 J0000006Europe/Moscow 2011, 14:24:41

3 ответа


0

Первый элемент ответа с использованием ADSI (по старинке)

Как это сделать почти все (с ADSI) в Active Directory с C #

Второй элемент ответа , начиная с .NET 3.5 Microsoft представляет « Principal » и « AccountManagement ».

Как сделать почти все (с AccountManagement) в Active Directory с помощью C #

Третий элемент ответа , вы можете использовать протокол низкого уровня (собственный LDAP) с System.DirectoryServices.Protocols (S.DS.P) .

  

Замечание . Если вас интересует, как запросить активный каталог из собственного кода, вы можете взглянуть на API-интерфейс привязки LDAP, как указано в RFC 1823, Microsoft поддерживает его, см. Стратегия MS для облегченного протокола доступа к каталогам (LDAP) . Вы найдете инструкции по использованию и справочные материалы по Microsoft API в облегченном протоколе доступа к каталогам .

ответил JPBlanc 23 J0000006Europe/Moscow 2011, 20:04:02
0

@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);
}
ответил rstackhouse 19 J000000Friday13 2013, 19:22:47
0

код мудрый, это намного проще, чем вы думаете. Вам необходимо создать соединение с каталогом, настроить поисковик, а затем выполнить поиск по имени свойства.

DirectoryEntry entry = new DirectoryEntry("LDAP://MyDomain.com");
DirectorySearcher dSearch = new DirectorySearcher(entry);
dSearch.Filter = "(&(objectCategory=person)(objectClass=user)(" + SType + "=" + Name + "))";

SType - это тип имени, а Name - это фактическое имя пользователя

ответил KenL 23 J0000006Europe/Moscow 2011, 14:49:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132