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

Accès aux données Discussion :

LDAPS et mot de passe


Sujet :

Accès aux données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Points : 27
    Points
    27
    Par défaut LDAPS et mot de passe
    Bonjour à tous

    Voici mon problème. Sur un site web, j'ai une page de Login qui doit me permettre de me connecter à un Active Directory distant, ce qui veut dire que le site web n'est pas sur le domaine de l'AD.

    Pour cela j'utilise un login générique (usernameLDAP et passwordLDAP) qui me permet de requêter l'AD via le code si dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    System.DirectoryServices.Protocols.LdapConnection con = new System.DirectoryServices.Protocols.LdapConnection(new System.DirectoryServices.Protocols.LdapDirectoryIdentifier(ipServerLDAP + ":" + portLDAP));
    con.Credential = new System.Net.NetworkCredential(usernameLDAP, passwordLDAP);
    con.SessionOptions.SecureSocketLayer = true;
    con.SessionOptions.ProtocolVersion = 3;
    con.SessionOptions.VerifyServerCertificate = new System.DirectoryServices.Protocols.VerifyServerCertificateCallback(ServerCallback);
    con.AuthType = System.DirectoryServices.Protocols.AuthType.Basic;
    con.Bind();
    SearchRequest request = new SearchRequest(searchDomainLDAP, "(samaccountname=" + username + ")", System.DirectoryServices.Protocols.SearchScope.Subtree, attribs);
    SearchResponse response = (SearchResponse)con.SendRequest(request);
    Tout fonctionne nickel sauf qu'une fois connecté, j'aimerai maintenant vérifier si la personne qui se connecte (username) est bien connue du LDAP. Je pensais utiliser le SearchRequest en filtrant sur le samaccountname et sur le mot de passe, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SearchRequest request = new SearchRequest(searchDomainLDAP, "(samaccountname=" + username + ")(&(password=" + mot_de_passe + "))",
    Mais pour le mot de passe je n'ai pas trouvé l'attribut.
    Existe-t-il ou faut-il faire autrement ?

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Si tu es sur une version du .NET Framework >= 3.5 tu peux utiliser le namespace System.DirectoryServices.AccountManagement :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using (var context = new PrincipalContext(ContextType.Domain))
    {
         bool isValid = context.ValidateCredentials(Username, Password);
    }

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Merci de ta réponse.

    Le pb est que PrincipalContext n'est apparemment utilisable que si la machine se trouve dans le domaine concerné (je suis tombé sur une réponse de forum à ce sujet).
    Or là je suis sur un serveur qui ne fait pas partie du domaine.

    Quand j'essaye de me connecter au LDAP avec PrincipalContext cela me renvoie "serveur indisponible".

  4. #4
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Citation Envoyé par Spoonnny Voir le message
    Bonjour à tous

    Voici mon problème. Sur un site web, j'ai une page de Login qui doit me permettre de me connecter à un Active Directory distant, ce qui veut dire que le site web n'est pas sur le domaine de l'AD.

    Pour cela j'utilise un login générique (usernameLDAP et passwordLDAP) qui me permet de requêter l'AD via le code si dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    System.DirectoryServices.Protocols.LdapConnection con = new System.DirectoryServices.Protocols.LdapConnection(new System.DirectoryServices.Protocols.LdapDirectoryIdentifier(ipServerLDAP + ":" + portLDAP));
    con.Credential = new System.Net.NetworkCredential(usernameLDAP, passwordLDAP);
    con.SessionOptions.SecureSocketLayer = true;
    con.SessionOptions.ProtocolVersion = 3;
    con.SessionOptions.VerifyServerCertificate = new System.DirectoryServices.Protocols.VerifyServerCertificateCallback(ServerCallback);
    con.AuthType = System.DirectoryServices.Protocols.AuthType.Basic;
    con.Bind();
    SearchRequest request = new SearchRequest(searchDomainLDAP, "(samaccountname=" + username + ")", System.DirectoryServices.Protocols.SearchScope.Subtree, attribs);
    SearchResponse response = (SearchResponse)con.SendRequest(request);
    Tout fonctionne nickel sauf qu'une fois connecté, j'aimerai maintenant vérifier si la personne qui se connecte (username) est bien connue du LDAP. Je pensais utiliser le SearchRequest en filtrant sur le samaccountname et sur le mot de passe, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SearchRequest request = new SearchRequest(searchDomainLDAP, "(samaccountname=" + username + ")(&(password=" + mot_de_passe + "))",
    Mais pour le mot de passe je n'ai pas trouvé l'attribut.
    Existe-t-il ou faut-il faire autrement ?

    Merci pour votre aide
    Tu n'utilises pas la bonne méthode. Lorsque l'on souhaite authentifier un utilisateur à un annuaire LDAP, notamment Active Directory, ce dernier fait des vérifications supplémentaires par rapport à la politique de mot de passe (expiration de mot de passe, ...). Pour cela, la méthode de comparaison du mot de passe n'est pas correcte. Il faut faire un bind avec les credentials de l'utilisateur.

    Tu doit donc ouvrir une nouvelle connexion à l'annuaire. Si elle est ok, c'est bon, l'utilisateur est authentifié !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    System.DirectoryServices.Protocols.LdapConnection con = new System.DirectoryServices.Protocols.LdapConnection(new System.DirectoryServices.Protocols.LdapDirectoryIdentifier(ipServerLDAP + ":" + portLDAP));
    con.Credential = new System.Net.NetworkCredential(username, mot_de_passe);
    con.SessionOptions.SecureSocketLayer = true;
    con.SessionOptions.ProtocolVersion = 3;
    con.SessionOptions.VerifyServerCertificate = new System.DirectoryServices.Protocols.VerifyServerCertificateCallback(ServerCallback);
    con.AuthType = System.DirectoryServices.Protocols.AuthType.Basic;
    con.Bind();

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    C'est bien ce que je craignais.

    Merci pour vos réponses.

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

Discussions similaires

  1. [LDAP] vérification mot de passe
    Par djibril dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/08/2010, 02h03
  2. [LDAP] Chiffrement mot de passe LDAP pour interface en PHP
    Par sedannais dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 10/08/2007, 17h17
  3. Probleme récuperation mot de passe LDAP
    Par chouchou92 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 14/06/2006, 16h39
  4. [LDAP]modification du mot de passe - ligne de commande
    Par sangei dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 01/12/2005, 15h49
  5. [LDAP]Encryptage mot de passe
    Par sangei dans le forum Sécurité
    Réponses: 18
    Dernier message: 24/11/2005, 12h59

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