Domanda

Ho un'applicazione web in esecuzione con l'autenticazione di Windows usando la nostra Active Directory. Ho un nuovo requisito per estrarre alcune informazioni personali dalla voce di Active Directory. Quale sarebbe il modo più semplice per accedere a queste informazioni?

È stato utile?

Soluzione

L'accesso diretto all'utente tramite un DirectoryEntry sembra l'approccio più diretto. Ecco alcune curiosità legate all'AD che ho imparato dal mio primo progetto relativo all'AD:

  • In un URI, scrivi LDAP in minuscolo. Altrimenti otterrai un errore misterioso. Ho trascorso più di un giorno su questo problema deprimente ...
  • Per cancellare una proprietà a valore singolo, impostarla su una stringa vuota, non nulla. Null provoca un'eccezione.
  • Per cancellare una proprietà a più valori, utilizzare il metodo DirectoryEntry.Property.Clear () .
  • Il riferimento allo schema di Active Directory indicherà quale tipo di dati sarà un valore e se si tratta di più valori o valore singolo.
  • Non è necessario aggiornare manualmente RefreshCache () su un Directoryentry ma se lo si utilizza mai e si specifica quali proprietà memorizzare nella cache, sapere che non recupererà automaticamente altre proprietà in futuro.
  • È possibile generare una COMException in qualsiasi momento in cui si utilizzano le classi in System.DirectoryServices. Tieni d'occhio quei blocchi di prova. Non dare per scontato che nulla sia sicuro.

Probabilmente dovrai usare DirectorySearcher per ottenere la voce della directory del tuo utente se non conosci il suo percorso (cosa che non avresti fatto, semplicemente facendolo accedere). Usarlo è stato abbastanza semplice ma attenzione alle stranezze nella sintassi LDAP; vale a dire, dover codificare caratteri non ASCII (e altri?). La stringa di ricerca che useresti sarebbe probabilmente qualcosa del tipo: (& amp; (sAMAccountName = qualunque) (class = user)) . Questo è fuori dalla mia testa e potrebbe essere leggermente errato.

Il Riferimento schema Active Directory sarà utile. Comprendi che lo schema può essere modificato ed esteso (ad es. L'installazione di Exchange aggiungerà agli utenti le informazioni sulla cassetta postale).

Explorer AD è uno strumento utile che puoi utilizzare per il debug e gestione dei dati AD di basso livello. L'ho trovato utile quando so quale proprietà voglio impostare ma non riesco a trovare la finestra di dialogo corretta nello strumento di gestione di AD.

Altri suggerimenti

Potresti trovare utile il seguente snippet come antipasto.

public static bool IsUserInGroup(string lanid, string group)
{
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + LDAPPATH);
    if(entry != null)
    {
        entry.Username=@"LDAPUSER";
        entry.Password="LDAPPASSWORD";
        DirectorySearcher srch = new DirectorySearcher(entry);
        srch.Filter = String.Format("(&(objectClass=person)(sAMAccountName={0}))", lanid);
        srch.PropertiesToLoad.Add("memberOf");

        SearchResult result = srch.FindOne();
        if(result != null)
        {
            if(result.Properties.Contains("memberOf"))
            {
                string lookfor = String.Format("cn={0},", group.ToLower());
                foreach(string memberOf in result.Properties["memberOf"])
                {
                    if(memberOf.ToLower().StartsWith(lookfor))
                        return true;
                }
            }
        }
        return false;
    }
    throw new Exception(String.Format("Could not get Directory lanid:{0}, group{1}",   lanid, group));
}

Dai un'occhiata allo spazio dei nomi System.DirectoryServices:

Spazio dei nomi System.DirectoryServices

Ho usato una libreria LDAP standard per recuperare informazioni da un server Active Directory, ma dovresti verificare che i dati necessari siano disponibili tramite lo schema del server LDAP. In generale, è possibile ottenere qualsiasi informazione memorizzata in InetOrganizationalPerson e la maggior parte delle informazioni relative ai gruppi a cui appartengono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top