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

Bibliothèques et frameworks PHP Discussion :

[LDAP] Authentification LDAP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 97
    Points : 64
    Points
    64
    Par défaut [LDAP] Authentification LDAP
    Bonjour

    je viens vers vous car j'essaye de créer une petite interface web , demandant login et passwd pour pouvoir acceder a la partie espace réservé.

    pour cela j'avais commencé a faire une page interfacée avec MySQL, ca marchait tres bien !!!

    maintenant on me demande de faire la meme chose mais avec un LDAP.

    j'ai donc créé mon formulaire :
    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
    <div id="Layer1">
          <form name="form1" method="POST" action="logldap2.php">
      <table width="305"  align="left" class="news_box">
        <tr bgcolor=""> 
          <td height="17" colspan="2" valign="top"> 
          <td valign="top">    </tr>
        <tr bgcolor="">
          <td height="3" colspan="3" valign="top"><h1 align="center">Authentification n&eacute;cessaire </h1>    </tr>
        <tr bgcolor="">
          <td height="0" colspan="3" valign="top">        </tr>
        <tr bgcolor="">
          <td height="1" colspan="3" valign="top">        </tr>
        <tr bgcolor="">
          <td height="8" valign="top"><p>&nbsp;</p>
          <td valign="top">Login:
          <td valign="top"><input type="text" name="login" />            </tr>
        <tr bgcolor=""> 
          <td height="34" align="left" valign="top"> 
            <p>&nbsp;</p>            
          <td height="34" align="left" valign="top">Mot de passe:
          <td height="34" align="left" valign="top"><input type="password" name="motDePasse" />    </tr>
        <tr> 
          <td height="35" colspan="2" rowspan="2">
          <td height="16"><input type="submit" name="verif" value="verification" />    </tr>
        <tr>
          <td height="17"></tr>
      </table>
     
    </form>

    puis ma page lohldap2.php:
    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
     
    <?
    //connexion a LDAP
    $server="192.168.0.10";
    $port="389";
    $dn="dc=societe,dc=fr";
    $log=$_POST['login'];
    $rootpw=$_POST['motDePasse'];
    $rootdn="cn=".$log.",$dn";
     
    $uid = $log;
     
    //tentative de connexion
    $ds=ldap_connect($server,$port); 
     
    //version du protocole utilisé si v2 marche pas
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
     
    //verification log et motdepasse
    $r=ldap_bind($ds,$rootdn,$rootpw)or die ("Impossible de se connecter au serveur ! \n");
    echo "Authentification sur le serveur OpenLDAP -> OK \n\n";
     
    ?>
    ca ca fonctionne avec le "Manager" dircetment inscrit dans slapd.conf;
    par contre mes users dans mon annuaire ne peuvent pas acceder à la page d'apres; il me met cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Warning: LDAP: Unable to bind to server: Invalid credentials in c:\program files\easyphp\www\test\site_l2e\logldap2.php on line 16
    Impossible de se connecter au serveur
    d'apres le message c 'est un pb de motde passe puisqu'il va chercher "Manager" dans slapd.conf.
    Dois-je rajouter une ligne dans slapd.conf pour lui dire de verifier mes users ?

    merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    j'ai essayé de rajouter $user et $uid, mais ca ne fonctionne toujours pas

    je continue de chercher

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Le message d'erreur me paraît clair Quel est le DN réel de l'utilisateur employé pour ce test ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    bonsoir, tous d'abord merci de m'aider

    le DN réel est : dc=societe,dc=fr

    en fait dans mon script il recherche une personne fesant partie de societe.fr
    mais je viens de m'apercevoir que cela est peut etre important de préciser de lui dire de chercher aussi dans l'ou puisque jai ecrit mon script de maniere a ce qu'il cherche dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cn=$_POST['login'],dc=societe,dc=fr
    je pourrais peut etre preciser la recherche dans ma base DN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ou=PersonneL,dc=societe,dc=fr
    je vais essayer

    J'ai importé mes users depuis une base NIS, ce qui fait que maintenant ce sont des'uid' et pas des 'cn' comme lors de la création d'un user..je sais pas si c'est important

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    J'ai bien compris que dc=societe,dc=fr correspondait à votre racine. Il faudrait en réalité déjà connaître le DN exact de l'utilisateur pour que le bind (authentification) fonctionne. Les attributs Common Name comme uid pouvant être indépendamment employé comme RDN, d'où ma question.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    je suis désolé d'etre aussi novice mais je ne vois pas tres bien, ce que vous voulez dire , je croyais que le dn exact etait la racineen developpant mon arbre dans openldap, et en cliquant sur mon user, jai ceci:
    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
     
    **************************************************
    Nom distingué: cn=lolo,o=permanents,ou=PersonneL,dc=societe,dc=fr
     
    **************************************************
    cn requis, rdn  
    lolodelp
    (renommer) 
    *****************
    gidNumber requis 
    0 
    root ()
    *****************   
    lolo 
    givenName  
    (ajouter une valeur) 
    *****************
    homeDirectory requis 
    /home/lolo 
    *****************
    loginShell
    /bin/csh  
    *****************   
    objectClass requis 
       (structurel)
    PosiXAccount
    Top
    (ajouter une valeur) 
    *****************
    sn requis 
    LOLODELP
    (ajouter une valeur) 
    ******************
    uidNumber requis 
    1000
    ****************** 
    User Name alias, requis 
    llolo
    (ajouter une valeur) 
    ******************
    userPassword
    monmdp
    ******************
    je ne sais pas si ca peut aider !! normalement tous mes users font partie de cette racine !!

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Essayez d'utiliser cn=lolo,o=permanents,ou=PersonneL,dc=societe,dc=fr lors du bind (comme valeur du deuxième paramètre). Donc le code initial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rootdn="cn=".$log.",$dn";
    Devait aboutir à la construction d'un DN erroné.

    Chaque objet (la racine en est un), possède un DN (nom distingué). C'est ce qui permet de l'identifier de manière unique et de le situer.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    ca avance un peu mieux :
    En effet en trifouillant mon code je suis arrivé a récupérer mon user uniquement par le login en tapant ce code :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    <html>
    <head>
    <title>AUTHENTIFICATION LDAP</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <style>
    BODY {
    font-family: Verdana, Arial, Helvetica;
    font-size: 12px;
    }
     
    P {
    font-family: Verdana, Arial, Helvetica;
    font-size: 12px;
    }
    </style>
    </head>
     
    <body>
    <h3>AUTHENTIFICATION LDAP </h3>
    <p>
    <form action="<? PHP_SELF ?>" method="post" name="form1">
    <b>Login:</b><br>
    <input type="text" name="login" size="30" maxlength="100" />
    <input type="password" name="password" size="30" maxlength="100"/>
    <br>
    <input type="submit" value="go">
    </form>
    </p>
    <?
    $u = $_POST["login"];
    $p = $_POST["password"];
     
    $baseDN = "dc=societe,dc=fr";
    $ldapServer = "192.168.0.10";
    $ldapServerPort = 389;
    $dn = 'o=permanents,ou=PersonneL,dc=societe,dc=fr';
     
    echo "Connexion au serveur <br />";
    $conn=ldap_connect($ldapServer);
     
    // on teste : le serveur LDAP est-il trouvé ?
    if ($conn)
     echo "Le résultat de connexion est ".$conn ."<br />";
    else
     die("connexion impossible au serveur LDAP");
     
    // On dit qu'on utilise LDAP V3, sinon la V2 par défaut est utilisé
    // et le bind ne passe pas. 
    if (ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3)) {
        echo "Utilisation de LDAPv3 \n";
     } else {
        echo "Impossible d'utiliser LDAP V3\n";
        exit;  }
     
    $bindServerLDAP=ldap_bind($conn);
     
    print ("Liaison au serveur : ". ldap_error($conn)."\n");
    // en cas de succès de la liaison, renvoie Vrai
    if ($bindServerLDAP)
      echo "Le résultat de connexion est $bindServerLDAP <br />";
    else
      die("Liaison impossible au serveur ldap ...");
     
    /*on effectue une recherche anonyme, avec le dn de base*/
     
    echo "Recherche suivant le filtre (sn='$u') <br />";
    $query = "uid=".$u;
    $mdp=$p;
    $result=ldap_search($conn, $baseDN, $query);
    echo "Le résultat de la recherche est $result <br />";
     
    $nb = ldap_count_entries ($conn,$result);
    echo "Nombre d'entrées retournées : ".$nb;
     
    echo "Lecture de ces entrées ....<p />";
    $info = ldap_get_entries($conn, $result);
    echo "Données pour ".$info["count"]." entrées:<p />";
     
    for ($i=0; $i < $info["count"]; $i++) {
            echo "premiere entree cn : ". $info[$i]["cn"][0] ."<br />";
            echo "premier email : ". $info[$i]["mail"][0] ."<p />";
    }
    /* clôture de la session  */
    echo "Fermeture de la connexion";
    ldap_close($conn);
    ?>
    ca fonctionne mais cela ne verifie pas le couple login et mdp , comment puis je lui dire de verifier le login et password ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Si vous passez ldap_bind (retour d'une valeur vraie) alors l'utilisateur (enfin son DN) et son mot de passe sont corrects. Une autre façon d'aborder, l'authentification (je ne sais pas si c'est ce que vous cherchez) consiste à utiliser un compte "proxy" chargé de faire ces vérifications (via ldap_compare notamment dans le but de vérifier que l'utilisateur de DN X a bien pour mot de passe Y - je vous recommande tout de même de ne pas stocker les mots de passe en clair). Tout dépend comment vous voulez concevoir votre application.

    Deux petites remarques quant à la syntaxe de votre code :
    • PHP_SELF n'est pas une constante, PHP devrait d'ailleurs générer un joli notice. La syntaxe correcte est $_SERVER['PHP_SELF']
    • Les balises courtes (<? et <?=) sont vivement déconseillées pour des raisons de portabilité (à, respectivement, préférer : <?php et <?php echo)

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

Discussions similaires

  1. [LDAP] Authentification LDAP avec Active Directory
    Par sco_didier dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 20/01/2009, 16h36
  2. [LDAP] Authentification LDAP via nom d'utilisateur/mot de passe en PHP
    Par hismaella dans le forum Bibliothèques et frameworks
    Réponses: 14
    Dernier message: 21/03/2007, 15h28
  3. [LDAP] Authentification automatique LDAP
    Par Gogus dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 19/12/2005, 14h37
  4. [LDAP] Authentification d'un utilisateur
    Par toctof dans le forum Sécurité
    Réponses: 7
    Dernier message: 13/12/2005, 18h21
  5. Authentification ldap pour apache sous Windows
    Par beastman007 dans le forum Apache
    Réponses: 3
    Dernier message: 13/07/2005, 12h03

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