IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Tester un mot de passe dans un Active Directory


Sujet :

C#

  1. #1
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut Tester un mot de passe dans un Active Directory
    Bonjour,

    J'aimerais tester si le mot de passe en paramètre de ma fonction est le même que le réel mot de passe dans mon active directory.

    Pour le pseudo et son équivalent le sam, pas de problème, Pour le mot de passe, je n'arrive pas à trouver la contrainte à mettre (sur mon objet DirectoryEntry ?). Cela doit être proche d'un Invoke, InvokeGet...


    Voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    /// <summary>
            /// Try to connect Username with password
            /// </summary>
            /// <param name="username">Username to test</param>
            /// <param name="passwd">Username's password</param>
            /// <param name="domain">Domain to connect</param>
            /// <param name="pseudoATest">Le pseudo à tester</param>
            /// <param name="motDePasse">Le mot de passe de l'utilisateur</param>
            /// <returns>True: Username/Password OK; False: Authentication error</returns>
            public bool IsAuthenticated(string username, string passwd, string domain, string pseudoATest, string motDePasse)
            {
                try
                {
                    DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, username, passwd, AuthenticationTypes.Secure);
                    DirectorySearcher search = new DirectorySearcher(entry);
                    search.Filter = "(&(objectClass=user)(SAMAccountName=" + pseudoATest + "))";
                    search.SearchScope = SearchScope.Subtree;
                    SearchResult result = search.FindOne();
                    return result != null;
                }
                catch (Exception ex)
                {
                    throw new Exception("Error authenticating user. " + ex.Message);
                }
            }
    Avez vous la solution ?

    Merci par avance.
    @+

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    je crois que tu ne peux pas by design. pour savoir cela, faut tenter une connexion (avec login/pwd) et voir si ca pete ou non
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    En fait, il suffit de te connecter au ldap avec le login/password passé en paramètre.

  4. #4
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    Re,

    hm, bon disons que je fais un premier test pour vérifier que le pseudo existe bien, ma fonction devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    /// <summary>
            /// Try to connect Username with password
            /// </summary>
            /// <param name="username">Username to test</param>
            /// <param name="passwd">Username's password</param>
            /// <param name="domain">Domain to connect</param>
            /// <param name="pseudoATest">Le pseudo à tester</param>
            /// <param name="motDePasse">Le mot de passe de l'utilisateur</param>
            /// <returns>True: Username/Password OK; False: Authentication error</returns>
            public bool IsAuthenticated(string username, string passwd, string domain, string pseudoATest, string motDePasseATest)
            {
                try
                {
                    DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, username, passwd, AuthenticationTypes.Secure);
                    DirectorySearcher search = new DirectorySearcher(entry);
                    search.Filter = "(&(objectClass=user)(SAMAccountName=" + pseudoATest + "))";
                    search.SearchScope = SearchScope.Subtree;
                    SearchResult result = search.FindOne();
                    if (result == null) throw new Exception("Pseudo inconnu.");
                    else
                    {
                        try
                        {
     
                            //on essaye pour voir si le pseudo mdp fonctionne 
                            DirectoryEntry entryPourMdp = new DirectoryEntry("LDAP://" + domain, pseudoATest, motDePasseATest, AuthenticationTypes.Secure);
                            DirectorySearcher searchPourMdp = new DirectorySearcher(entryPourMdp);
                            searchPourMdp .Filter = "(objectClass=user)";
                            SearchResult resultPourMdp = searchPourMdp .FindOne();
                            if (resultPourMdp == null) throw new Exception("Erreur de mot de passe.");
                        }
                        catch (Exception)
                        {
                            throw new Exception("Mot de passe erroné.");
                        }
                    }
                    return result != null;
                }
                catch (Exception ex)
                {
                    throw new Exception("Erreur de connexion à l'AD. Les paramètres sont incorrectes. " + ex.Message);
                }
            }
    ça fonctionne, merci :-) !

    (multiple edits car fin de journée donc pas mal d'erreurs !)

    @+

  5. #5
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Pourquoi masquer les exceptions système ? tu ne fais rien dans les catch à part lever une nouvelle exception avec un message plus convivial et tu perds la pile des exception... Vu ce que tu fais, ne fais pas de try/catch et laisse les exceptions se propager jusqu'à la couche qui fait vraiment quelque chose.
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  6. #6
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    Salut,

    c'est plus un choix pour ma fonction. Sur celle-ci je n'ai pas l'impression que les exceptions systèmes sont intéressantes (problème de connexion dans tous les cas, pseudo ou mot de passe).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer le mot de passe dans VB
    Par Safaritn dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/10/2005, 12h19
  2. Passage de login mot de passe dans l'URL avec IE6 sp2
    Par SPA dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 07/10/2005, 08h47
  3. Smbclient mettre le mot de passe dans la ligne de commande
    Par EpOnYmE187 dans le forum Réseau
    Réponses: 2
    Dernier message: 28/07/2005, 19h39
  4. apache su mot de passe dans un fichier
    Par jean-jacques varvenne dans le forum Apache
    Réponses: 4
    Dernier message: 31/01/2005, 20h07
  5. sécuriser le mot de passe dans une page asp
    Par Redouane dans le forum ASP
    Réponses: 2
    Dernier message: 10/03/2004, 21h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo