Подтвердить что ты не робот

Запрос LDAP

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

4b9b3361

Ответ 1

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

Как сделать Почти все (с ADSI) в Active Directory с С#

Второй элемент ответа, начиная с .NET 3.5 Microsoft представляет "Принципала" и "Управление учетными записями".

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

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

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

Ответ 2

@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);
}

Ответ 3

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

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

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