Question

J'ai une application Web qui s'exécute sur l'authentification Windows à l'aide de notre annuaire actif. J'ai une nouvelle exigence pour extraire certaines informations personnelles à partir de l'entrée Active Directory. Quel serait le moyen le plus simple d’avoir accès à ces informations?

Était-ce utile?

La solution

Accéder à l'utilisateur directement via DirectoryEntry semble être l'approche la plus simple. Voici quelques informations relatives à l’AD qui ont été apprises lors de mon premier projet relatif à l’AD:

  • Dans un URI, écrivez LDAP en minuscule. Sinon, vous obtiendrez une erreur mystérieuse. J'ai passé plus d'une journée sur cette question déprimante ...
  • Pour effacer une propriété à valeur unique, définissez-la sur une chaîne vide et non sur null. Null provoque une exception.
  • Pour effacer une propriété à valeurs multiples, utilisez la méthode DirectoryEntry.Property.Clear () .
  • La référence de schéma Active Directory indiquera quel type de données sera une valeur et s'il s'agit d'une valeur unique ou d'une valeur unique.
  • Vous n'avez pas besoin de RefreshCache () manuellement sur un Directoryentry, mais si vous l'utilisez et spécifiez les propriétés à mettre en cache, sachez qu'il ne récupérera pas automatiquement d'autres propriétés à l'avenir.
  • Une exception COMException peut être levée à tout moment lorsque vous utilisez les classes dans System.DirectoryServices. Gardez un œil sur ces blocs d'essai. Ne supposez rien, rien n’est en sécurité.

Vous aurez probablement besoin de DirectorySearcher pour obtenir l’entrée du répertoire de votre utilisateur si vous ne connaissez pas son chemin (ce que vous ne voudriez pas, il suffit de le connecter). Son utilisation était assez facile mais méfiez-vous des bizarreries dans la syntaxe LDAP; à savoir, avoir à coder des caractères non-ASCII (et autres?). La chaîne de recherche que vous utiliseriez serait probablement quelque chose comme: (& amp; (sAMAccountName = peu importe) (classe = utilisateur)) . C’est hors de ma tête et peut être légèrement incorrect.

La référence de schéma Active Directory sera utile. Comprenez bien que le schéma peut être modifié et étendu (par exemple, l'installation d'Exchange ajoutera des informations de boîte aux lettres aux utilisateurs).

AD Explorer est un outil utile que vous pouvez utiliser pour le débogage. et gestion de données AD de bas niveau. Je l’ai trouvé utile lorsque je sais quelle propriété je veux définir mais que je ne trouve pas la bonne boîte de dialogue dans l’outil de gestion AD.

Autres conseils

Vous pourriez trouver l'extrait suivant utile comme démarreur.

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

Consultez l'espace de noms System.DirectoryServices:

Espace de noms System.DirectoryServices

J'ai utilisé une bibliothèque LDAP standard pour extraire des informations d'un serveur Active Directory, mais vous devez vérifier que les données dont vous avez besoin sont disponibles via le schéma du serveur LDAP. En général, vous pouvez obtenir toutes les informations stockées dans InetOrganizationalPerson ainsi que la plupart des informations relatives aux groupes auxquels ils appartiennent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top