2013-02-11 25 views
35

Chcę połączyć się z naszym lokalnym Active Directory przy pomocy C#.Połącz się z usługą Active Directory za pośrednictwem LDAP

Znalazłem this good documentation.

Ale naprawdę nie rozumiem, jak połączyć się przez LDAP.

Czy ktoś z was może wyjaśnić, jak używać zadanych parametrów?

Przykładowy kod:

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

mam tylko nazwę hosta i adres IP naszego serwera Active Directory. Co oznacza DC=xxx,DC=xx i tak dalej?

+4

ou = jednostka organizacyjna, dc = komponent domeny – paul

Odpowiedz

59

DC jest domena. Jeśli chcesz połączyć się z domeną example.com niż twoimi DC to: DC = przykład, DC = com

Nie potrzebujesz żadnej nazwy hosta ani adresu IP kontrolera domeny (może być ich dużo) .

Po prostu obrazujesz, że łączysz się z samą domeną. Aby połączyć się z domeną example.com, możesz po prostu napisać:

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

I gotowe.

Można również określić użytkownika i hasło używane do łączenia:

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

Również należy zawsze pisać LDAP wielkimi literami. Miałem pewne kłopoty i dziwne wyjątki, dopóki nie przeczytałem gdzieś, że powinienem spróbować napisać to na dużą literę i to rozwiązało moje problemy.

Właściwość directoryEntry.Path umożliwia głębsze zanurzenie się w domenie. Jeśli chcesz wyszukać użytkownika w określonej jednostce organizacyjnej (OU), możesz go tam ustawić.

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

To byłoby zgodne z następującą hierarchię AD:

  • com
    • przykład
      • Użytkownicy
        • Wszyscy użytkownicy
          • konkretnych użytkowników

Wystarczy napisać hierarchię z najgłębszym do najwyższej.

Now you can do plenty of things

Na przykład szukać użytkownika wg nazwy konta i uzyskać jego nazwisko:

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

To jest odpowiedź! Dziękuję za pomoc. –

+0

Mam IpAddress i FQN; Który jest szybszy? Czy 1 adres IP będzie zawierał więcej niż 1 domenę? –

+0

Wystąpiłem we wszelkiego rodzaju wyjątkach, dopóki nie uprościłem filtru do: '" (cn = roland) "'. Z działającego systemu można uczynić filtr stopniowo "lepszym" (= bardziej złożonym) – Roland

2

ldapConnection to adres serwera: ldap.example.com Ldap.Connection.Path to ścieżka wewnątrz ADS, którą chcesz użyć wstawiania w formacie LDAP.

OU = Your_OU, OU = other_ou, dc = example, dc = com

Zaczynasz na najgłębszym OU pracy z powrotem do korzeni naszej ery, a następnie dodać dc = X dla każdej domeny sekcja aż masz wszystko, włączając w domenie najwyższego poziomu

teraz tęsknię parametrem do uwierzytelnienia, to działa tak samo jak ścieżki dla nazwy użytkownika

CN = nazwa użytkownika, OU = users, DC = example, DC = com

Introduction to LDAP

0

Jeśli Twój adres e-mail jest „[email protected]”, spróbuj zmienić createDirectoryEntry() jak poniżej .

XYZ to opcjonalny parametr, jeśli istnieje w katalogu MojaDomena

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

To w zasadzie sprawdzenia com -> mydomain -> XYZ -> Użytkownicy -> ABCD

Główną funkcją wygląda jak poniżej :

try 
{ 
    username = "Firstname LastName" 
    DirectoryEntry myLdapConnection = createDirectoryEntry(); 
    DirectorySearcher search = new DirectorySearcher(myLdapConnection); 
    search.Filter = "(cn=" + username + ")"; 
    ....  
Powiązane problemy