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

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

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

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

Но я действительно не понимаю, как подключиться через 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 и т.д.?

4b9b3361

Ответ 1

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

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

Простое изображение, которое вы подключаете к самому домену. Поэтому для подключения к домену 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();
}

Ответ 2

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

OU = Your_OU, OU = other_ou, DC = пример, DC = ком

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

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

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

Введение в LDAP

Ответ 3

Если ваш адрес электронной почты "[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 + ")";
    ....