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

Langage PHP Discussion :

Script connexion PHP sur un ldap


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut Script connexion PHP sur un ldap
    Bonjours,

    Avant de commencer. Je tiens à préciser que je suis sur le script depuis 1semaine. Que j'ai beaucoup utilisé Google et ce forum developpez.
    J'ai amélioré mon script du mieux que j'ai pu le comprendre. J'ai utilisé les documents sur le PHP particulièrement le tout sur les fonctions LDAP_....

    Mon objectif :
    A partir d'un site interne,actuellement remplacé par un formulaire temporaire pour les essaies, j'ai besoin que les utilisateurs tapent leur login/Mot de passe. En validant, le script part vérifier que l'utilisateur existe sur mon LDAP. Si l'utilisateur existe et que ses identifiants correspondent avec le LDAP, alors il lancera la page adéquate.

    Mon 2eme objectif :
    J'y travaillerais une fois le premier réalisé.
    Si les identifiants de l'utilisateur sont ok, j'aimerais qu'il me rajoute le user/mot de passe dans la base de donnée du site. En gros il importe les info du LDAP sur la Base de donnée une fois identifié.
    (cet objectif n'est pas encore d'actualité)

    Le formulaire et le script sont actuellement dans le même document *.php
    J'ai tenté de me simplifier pour les tests.

    Code du mon formulaire (aucun souci avec lui)
    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
    <html>
    <head>
    <title>Authentification</title>
    </head>
    <body>
    <br>
    <script language="Javascript">
    function verifierSaisie() {
    if(document.authentification.login.value=="") {
    alert("Login non saisi.");
    }
    else {
    if(document.authentification.pass.value=="") {
    alert("Pass non saisi");
    }
    else {
    document.authentification.cours.value="en cours...";
    document.authentification.submit();
    }
    }
    }
    </script>
    <div align="center">
    <form name="authentification" action="<?php  $PHP_SELF ?>" method="post">
    <table width="90%" border="0" cellspacing="0" >
    <tr>
    <td colspan="2" align="center"><b><font size="+1">Authentification</font></b></td>
    </tr>
    <tr>
    <td>Login :</td>
    <td><input style="border-style:solid" type="text" name="login" size="16" maxlength="30"></td>
    </tr>
    <tr>
    <td>Pass :</td>
    <td><input style="border-style:solid" type="password" name="pass" size="16" maxlength="30"></td>
    </tr>
    <tr>
    <td colspan="2" align="center"><input type="hidden" value="true" name="saisieEffectuer">
    <input type="button" value="Annuler" onclick="window.close()">&nbsp;
    <input type="button" OnClick="verifierSaisie()" value="Ok"></td>
    </tr>
    </table>
    <input type='text' style='border:none; ' name='cours' value='' size=11 >
    </form>
    </div>
    </body>
    </html>
    Code du script 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
    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
    <?php
    if($saisieEffectuer) {
    // informations de connexions
     
    		$ldaphost = "ldap://XXX.XXX.XXX.XXX"; //inserer ici l'addresse du serveur LDAP
    		$ldapBaseDN = "SN=XXX-XXX-XX,SN=XX,SN=XXXX_XX,DC=XXXX-XXXX,DC=XXXX,DC=XXX";
    		$ldapport = 389; // Optional.   
     
    // Eléments d'authentification LDAP
    		$users = "uid=".$POST['login'];   // DN ou RDN LDAP / Doute sur comment recuperer le login du formulaire html
    		$passs = $_POST['pass']; // Mot de passe associé/ Doute sur comment recuperer le mot du formulaire html...
     
    // Pour le mot de passe en SSHA
    		mt_srand((double)microtime()*1000000);
    		$salt = pack("CCCC", mt_rand(), mt_rand(), mt_rand(), mt_rand());
    		$hash = "{SSHA}" . base64_encode(pack("H*", sha1($passs . $salt)) . $salt);
    //			echo $hash . "\n";
     
    // Connexion au serveur LDAP
    		$ldapconn = ldap_connect($ldaphost, $ldapport) 
    			or die("Impossible de se connecter au serveur LDAP.");  
     
    // Option du LDAP passer à la version 3
    		ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
    		ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
     
    		$ldapsearch = ldap_search($ldapconn, $ldapBaseDN, $users)
    			or exit(">>erreur lors de la recherche<<");
    		$result = ldap_get_entries($ldapconn,$ldapsearch);
     
    		if ($result[0])
    		{
    			$ldapbind = (ldap_bind($ldapconn, $result[0]['dn'], $hash)); //surement la provenance de mon problème...
    		}
    		if ( $ldapbind == FALSE )  // si le BIND est FALSE
    			{
    			echo " il est membre mais mauvais mdp";
    			}
    			elseif ( $ldapbind == TRUE )  // Les futures traitement une fois le reste en fonctionnement;
    			{
    				echo " OK!!!!";
    			}
     
    		else {
    		echo  "nom de user invalide"; // le user n'a pas pu être trouvé
    		}
     
     }
    echo "Fermeture de la connexion";
    ldap_close($ldapconn);
     
    ?>
    Le problème que j'ai dans tout ca se situe au niveau du ldap_bind
    Chose que je suis conscient de bloqué depuis belle lurette maintenant
    J'utilise pour faire mes essaies, mon compte et passe perso. Qui sont des droits administrateur. Ca me permet de limiter les erreurs.
    L'erreur qui ressort après validation c'est "il est membre mais mauvais mdp"

    Au début je pensais que je récupérais mal mon login et pass du formulaire html. Après pas mal de recherche je n'ai plus trop cette impression. Si on peut me confirmer que c'est bien structuré. MErci

    J'attends vos premiers retour. Et je vous donnerez d'autre information si j'ai oublié quelque chose.

    Merci par avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Par défaut
    Tu t'y prend peut être mal dans le cryptage du mot de passe.
    Je peut vraiment t'aider qu'en te donnant quelques liens :

    http://www.php.net/ldap.using
    http://beaussier.developpez.com/articles/php/ldap/

    Bonne lecture

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    Merci pour l'indice.

    Je pensais effectivement que j'ai un problème sur le cryptage. Le souci venant du mot de passe.

    Je vais lire les docs que tu m'as fournis et voir ce que ca donne merci.

    ps : J'avais fais des essaies avec le mot de passe en dur... Mais ca n'avait pas marché. Je reviens après lecture. Le 1er et 2eme site que j'ai déjà épluché. Je vois le dernier.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    Nouvelle étape.
    Encore merci pour les documentations. Ca m'a permis de voir plus claire.
    Par contre j'ai toujours un problème assez pénible au niveau du mot de passe.

    Voici mon nouveau code remanié (toujours commenté pour un maximum de clarté):

    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
    <?php
    if($saisieEffectuer) {
     
    // informations de connexions
     
    		$ldaphost = "ldap://XXX.XXX.XXX.XX"; //inserer ici l'addresse du serveur LDAP
    		$ldapBaseDN = "SN=XXXX,SN=XX,SN=XXXX,DC=XXXX,DC=XXX,DC=XX";
    		$ldapport = 389; // Optional. 
     
    // informations users tirées du formulaire HTML
    		$users = $_POST['login'];		
    		$passs = $_POST['pass'];
     
    // Conversion du mot de pass en SSHA
    		mt_srand((double)microtime()*1000000);
    		$salt = pack("CCCCCCCC", mt_rand(), mt_rand(), mt_rand(), mt_rand(), mt_rand(), mt_rand(), mt_rand(), mt_rand());
    		$userPass = "{SSHA}" . base64_encode(pack("H*", sha1($passs . $salt)) . $salt);
    			echo $userPass . "\n";
     
     
    echo "<h3>Recherche dans LDAP</h3>";
     
    // Connexion au ldap
    $ldapconn = ldap_connect ($ldaphost);
     
    // Si connexion fonctionne
    if ($ldapconn)
    {
     
    //Passage en version 3 du ldap
    		ldap_set_option ($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
     
    // Connexion anonyme
    		$ldapbind = ldap_bind ($ldapconn);
     
    // J'aimerais remplacer une connexion anonyme par une connexion identifié. NE FONCTIONNE PAS :(
    //		$ldapbind = ldap_bind ($ldapconn, $users, $hash);
     
    // Fonction de recherche users et mot de passe si existant
    		$sr = ldap_search ($ldapconn,$ldapBaseDN , "uid=".$users);
    		$sr2 = ldap_search ($ldapconn,$ldapBaseDN , "userPassword=".$passs);
    		$info = ldap_get_entries ($ldapconn, $sr);
    		$info2 = ldap_get_entries ($ldapconn, $sr2);
     
    		echo "Nombre de personnes trouvées : ".$info ["count"]."<p>";
    		echo "Mot de passe trouvé : ".$info2 ["count"]."<p>";
     
    // Affiche les informations trouvées
    		for ($i=0; $i < $info ["count"]; $i++)
    		{
    			echo "dn : ". $info[$i]["dn"] ."<br>";
    			echo "cn : ". $info[$i]["cn"][0] ."<br>";
    			echo "sn : ". $info[$i]["sn"][0] ."<p>";
    		}
     
    // Affiche si le mot de passe est bon... 
    		for ($i=0; $i < $info2 ["count"]; $i++)
    		{
    			echo "dn : ". $info2[$i]["dn"] ."<br>";
    			echo "cn : ". $info2[$i]["cn"][0] ."<br>";
    			echo "sn : ". $info2[$i]["sn"][0] ."<p>";
    		}
     
    }
     
    echo "Fermeture de la connexion";
    ldap_close($ldapconn);
    }
    ?>
    La réponse du script quand je tape un user et un password
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {SSHA}DYXXXX.......
     
    Recherche dans LDAP
     
    Nombre de personnes trouvées : 1
     
    Mot de passe trouvé : 0
     
    dn : uidNumber=XXXXX,sn=XXX,sn=XX,sn=XX,dc=XXX,dc=XXX,dc=XX
    cn : XXXX YYY
    sn : XXXX
     
    Fermeture de la connexion
    Je n'ai vraiment pas une mauvaise volonté. J'épluche beaucoup de documents. Mais je n'ai absolument pas la vocation de programmeur. D'où mes lacune pour finaliser ce script(qui j'avoue me tape sur les nerfs ) Il me manque peut être des bases. Mais à l'heure actuel, étant partie de rien je trouve que mon script est pas si mal. Si on pouvait me donner une petite aide pour comprendre pourquoi le mot de passe ne marche pas. Je pourrais avancer sur la suite des événements.

    Tant que je ne comprend pas pourquoi mon mot de passe reste erroné, je ne peux pas passer d'une connexion anonyme à une connexion par identification. Ce qui m'empêche d'avancer...

    Merci de votre assistance. En espérant en obtenir une plus poussé que jusqu'à présent.

    PS : Le formulaire HTML ou je récupère le passe et le user du début du message reste le même.

    Cordialement, dans l'espoir de résoudre ce problème.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    Petit up et petite précision supplémentaire
    Mon site est hébergé sur un fedora 8... Je sais pas si ca peut aider...

    Peut être devrais je poster dans une autre partie du forum...? Style php sessions?

Discussions similaires

  1. Connexion php sur une base MSSQL Server impossible
    Par momosan dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/03/2012, 19h44
  2. [SQL] connexion php sur sql server distant
    Par grinder59 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/06/2010, 09h26
  3. [MySQL] comprendre une connexion php sur une base SQL
    Par gillot007 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/12/2008, 13h53
  4. connexion distante php sur SQL SERVER
    Par grinder59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/03/2006, 14h59
  5. [Serveur] executer script php sur red hat
    Par jj del amorozo dans le forum Apache
    Réponses: 6
    Dernier message: 08/02/2006, 15h29

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