Question

J'essaie d'authentifier un utilisateur auprès d'ADAM à l'aide d'un utilisateur que j'ai créé dans ADAM. Cependant, quel que soit le mot de passe utilisé (correct ou incorrect), ma recherche renvoie un objet DirectoryEntry valide. Je supposerais que si le mot de passe est invalide, alors la recherche reviendrait avec un objet null. Mes hypothèses sont-elles erronées ou existe-t-il une faille dans le code ci-dessous?

DirectoryEntry de = new DirectoryEntry("LDAP://localhost:389/cn=Groups,cn=XXX,cn=YYY,dc=ZZZ");
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = "(&(objectClass=user) (cn=" + userId + "))";
SearchResultCollection results = deSearch.FindAll();
if (results.Count > 0)
{
    DirectoryEntry d = new DirectoryEntry(results[0].Path, userId, password);
        if (d != null)
        DoSomething();

}
Était-ce utile?

La solution

Vous devez accéder à une propriété de DirectoryEntry pour déterminer si elle est valide. Je vérifie habituellement si le Guid est nul ou non.

bool valid = false;
using (DirectoryEntry entry = new DirectoryEntry( results[0].Path, userId, password ))
{
     try
     {
         if (entry.Guid != null)
         {
            valid = true;
         }
     }
     catch (NullReferenceException) {}
}

Remarque: vous voudrez également encapsuler votre entrée de répertoire racine de recherche et votre chercheur dans à l'aide d'instructions , ou les supprimer explicitement lorsque vous avez terminé, afin que vous ne laissiez pas les ressources en cours d'utilisation. .

P.S. Je ne sais pas exactement quelle exception est levée lorsque vous tentez d'accéder à des propriétés d'entrées de répertoire non valides. Un peu d’expérimentation est probablement nécessaire pour déterminer quelle exception à attraper. Vous ne voudrez pas intercepter toutes les exceptions, car il existe d'autres problèmes (serveur d'annuaire non disponible, par exemple) que vous voudrez peut-être traiter différemment d'une authentification ayant échoué.

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