Подключение к Active Directory через LDAP

Я хочу подключиться к нашему локальному Active Directory с C #.

Я нашел эту хорошую документацию .

Но я действительно не понимаю, как подключиться через LDAP.

Может кто-нибудь из вас объяснить, как использовать заданные параметры?

Образец кода:

static DirectoryEntry createDirectoryEntry() { // create and return new LDAP connection with desired settings DirectoryEntry ldapConnection = new DirectoryEntry("rizzo.leeds-art.ac.uk"); ldapConnection.Path = "LDAP://OU=staffusers,DC=leeds-art,DC=ac,DC=uk"; ldapConnection.AuthenticationType = AuthenticationTypes.Secure; return ldapConnection; } 

Я просто имею имя хоста и IP-адрес нашего сервера Active Directory. Что означает DC=xxx,DC=xx и т. Д.?

DC – это ваш домен. Если вы хотите подключиться к домену example.com, чем ваши DC: DC = пример, DC = com

На самом деле вам не нужно какое-либо имя хоста или IP-адрес вашего controllerа домена (их может быть много).

Представьте, что вы подключаетесь к самому домену. Поэтому для подключения к домену example.com вы можете просто написать

 DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com"); 

И вы сделали.

Вы также можете указать пользователя и пароль, используемые для подключения:

 DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com", "username", "password"); 

Также обязательно указывайте LDAP в верхнем регистре. У меня были некоторые неприятности и странные исключения, пока я не прочитал где-нибудь, что я должен попытаться написать его в верхнем регистре, и это решило мои проблемы.

Свойство directoryEntry.Path позволяет глубже погрузиться в ваш домен. Поэтому, если вы хотите искать пользователя в определенном подразделении (организационном подразделении), вы можете его установить.

 DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com"); directoryEntry.Path = "LDAP://OU=Specific Users,OU=All Users,OU=Users,DC=example,DC=com"; 

Это будет соответствовать следующей иерархии AD:

  • ком
    • пример
      • пользователей
        • Все пользователи
          • Конкретные пользователи

Просто напишите иерархию от самой глубокой до самой высокой.

Теперь вы можете делать много вещей

Например, найдите пользователя по имени учетной записи и получите фамилию пользователя:

 DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com"); DirectorySearcher searcher = new DirectorySearcher(directoryEntry) { PageSize = int.MaxValue, Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=AnAccountName))" }; searcher.PropertiesToLoad.Add("sn"); var result = searcher.FindOne(); if (result == null) { return; // Or whatever you need to do in this case } string surname; if (result.Properties.Contains("sn")) { surname = result.Properties["sn"][0].ToString(); } 

ldapConnection – это сервер adres: ldap.example.com Ldap.Connection.Path – это путь внутри ADS, который вам нравится использовать в формате LDAP.

OU = Your_OU, OU = other_ou, DC = пример, DC = COM

Вы начинаете с самого глубокого OU, работающего обратно в корень AD, затем добавляете dc = X для каждой секции домена, пока не получите все, включая домен верхнего уровня

Теперь я пропускаю параметр для аутентификации, это работает так же, как путь для имени пользователя

CN = имя пользователя, OU = пользователи, DC = пример, DC = COM

Введение в LDAP

Если ваш адрес электронной почты «[email protected]», попробуйте изменить createDirectoryEntry (), как показано ниже.

XYZ является необязательным параметром, если он существует в каталоге mydomain

 static DirectoryEntry createDirectoryEntry() { // create and return new LDAP connection with desired settings DirectoryEntry ldapConnection = new DirectoryEntry("myname.mydomain.com"); ldapConnection.Path = "LDAP://OU=Users, OU=XYZ,DC=mydomain,DC=com"; ldapConnection.AuthenticationType = AuthenticationTypes.Secure; return ldapConnection; } 

Это будет в основном проверять на com -> mydomain -> XYZ -> Пользователи -> abcd

Основная функция выглядит следующим образом:

 try { username = "Firstname LastName" DirectoryEntry myLdapConnection = createDirectoryEntry(); DirectorySearcher search = new DirectorySearcher(myLdapConnection); search.Filter = "(cn=" + username + ")"; .... 
  • Каковы ограничения C ++ по сравнению с C-языком?
  • генерировать EF orderby Выражение строкой
  • Лучший способ извлечь подвектор из вектора?
  • .NET ObservableDictionary
  • Как запустить программу C из VIM?
  • Каков правильный способ освободить память в C #
  • Несколько клиентов асинхронного сервера
  • Разница между фреймворком и статической библиотекой в ​​xcode4 и как их называть
  • Как засеять в Entity Framework Core 2?
  • Тип провайдера CodeDom «Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider» не может быть расположен
  • Linq выбирает объекты в списке, где существует IN (A, B, C)
  • Давайте будем гением компьютера.