2013-02-11 5 views
35

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

Я нашел this good documentation.

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

Я просто имею Hostname и IP-адрес нашего сервера Active Directory. Что такое DC=xxx,DC=xx и так далее?

+4

ou = организационное подразделение, dc = компонент домена – paul

ответ

59

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

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

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

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

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

Now you can do plenty of things

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

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(); 
} 
+1

Это ответ! Спасибо за помощь. –

+0

У меня есть IpAddress и FQN; Что быстрее? Также будет ли IpAddress иметь более одного домена, реферированного в нем? –

+0

Я столкнулся со всеми исключениями, пока я не попробовал фильтр: '' (cn = roland) ". Из рабочей системы можно сделать фильтр постепенно «лучше» (= более сложным) – Roland

2

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

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

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

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

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

Introduction to LDAP

0

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

Это будет в основном проверить ком -> MYDOMAIN -> XYZ -> Пользователи -> ABCD

Основная функция выглядит, как показано ниже :

try 
{ 
    username = "Firstname LastName" 
    DirectoryEntry myLdapConnection = createDirectoryEntry(); 
    DirectorySearcher search = new DirectorySearcher(myLdapConnection); 
    search.Filter = "(cn=" + username + ")"; 
    ....  
Смежные вопросы