2013-02-11 1 views
35

Desidero connettermi alla nostra Active Directory locale con C#.Connessione a Active Directory tramite LDAP

Ho trovato this good documentation.

Ma davvero non capisco come collegarmi via LDAP.

Qualcuno di voi può spiegare come utilizzare i parametri richiesti?

codice di esempio:

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

devo solo il nome host e l'indirizzo IP del nostro server Active Directory. Cosa significa DC=xxx,DC=xx e così via?

+4

ou = unità organizzativa, dc = componente di dominio – paul

risposta

59

DC è il vostro dominio. Se vuoi connetterti al dominio example.com che sono le tue dc: DC = example, DC = com

In realtà non hai bisogno di alcun nome host o indirizzo IP del tuo controller di dominio (Ce ne potrebbero essere molti) .

Solo immagini ti stai collegando al dominio stesso. Quindi per la connessione al dominio example.com puoi semplicemente scrivere

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

E il gioco è fatto.

È inoltre possibile specificare un utente e una password utilizzata per la connessione:

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

anche essere sicuri di scrivere sempre LDAP in maiuscolo. Ho avuto qualche problema e strane eccezioni fino a quando ho letto da qualche parte che dovrei provare a scriverlo in maiuscolo e questo ha risolto i miei problemi.

La proprietà directoryEntry.Path consente di approfondire il proprio dominio. Quindi, se si desidera cercare un utente in un'unità organizzativa specifica (Unità organizzativa), è possibile impostarlo lì.

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

Ciò corrisponde la seguente gerarchia AD:

  • com
    • esempio
      • Utenti
        • Tutti gli utenti
          • utenti specifici

Basta scrivere la gerarchia dal più profondo al più alto.

Now you can do plenty of things

Per esempio ricercare un utente in base al nome account e ottenere il suo cognome:

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

Questa è una risposta! Grazie per l'aiuto. –

+0

Ho IpAddress e FQN; Quale è più veloce? Inoltre 1 IpAddress ha più di 1 dominio arbitrato in esso? –

+0

Ho incontrato tutti i tipi di eccezioni, fino a quando ho semplificato il filtro su: '" (cn = roland) "'. Da un sistema funzionante si può rendere il filtro gradualmente "migliore" (= più complesso) – Roland

2

ldapConnection è il server adres: ldap.example.com Ldap.Connection.Path è il percorso all'interno di ADS che si desidera utilizzare nell'inserto in formato LDAP.

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

Si avvia alla massima cc OU lavorare di nuovo alla radice del dC, quindi aggiungere = X per ogni dominio sezione fino ad avere tutto, incluso il dominio di primo livello

Ora mi manca un parametro per l'autenticazione, questo funziona lo stesso come il percorso per il nome utente

CN = nome utente, OU = utenti, DC = esempio, DC = com

Introduction to LDAP

0

Se il vostro indirizzo e-mail è '[email protected]', provare a cambiare il createDirectoryEntry() come di seguito .

XYZ è un parametro opzionale se esiste nella directory 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; 
} 

Questo sarà essenzialmente verificare la presenza di com -> mydomain -> XYZ -> Utenti -> abcd

La funzione principale sembra come di seguito :

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