Identification LDAP dans script PHP avec password

silennnce Messages postés 4 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 19 août 2009 - 14 août 2009 à 02:20
silennnce Messages postés 4 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 19 août 2009 - 19 août 2009 à 11:33
Bonjours à tous.
Pour commencer je vais exposé mon script

Ce script est un simple formulaire HTMl pour récupérer un login et un mot de passe

<html>
<head>
<title>Authentification</title>
</head>



<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>


<form name="authentification" action="<?php  $PHP_SELF ?>" method="post">
Authentification,

----

Login :,
,

----

Pass :,
,

----



</form>



</html>


Ce script(le principal) est celui qui permet de se connecter à un LDAP. Mais j'ai des problèmes.
<?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 "Recherche dans LDAP
";
 
// 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"]."";
echo "Mot de passe trouvé : ".$info2 ["count"]."";
 
// Affiche les informations trouvées
for ($i=0; $i < $info ["count"]; $i++)
{
echo "dn : ". $info[$i]["dn"] ."
";
echo "cn : ". $info[$i]["cn"][0] ."
";
echo "sn : ". $info[$i]["sn"][0] ."";
}
 
// Affiche si le mot de passe est bon... 
for ($i=0; $i < $info2 ["count"]; $i++)
{
echo "dn : ". $info2[$i]["dn"] ."
";
echo "cn : ". $info2[$i]["cn"][0] ."
";
echo "sn : ". $info2[$i]["sn"][0] ."";
}
 
}
 
echo "Fermeture de la connexion";
ldap_close($ldapconn);
}
?>


Ceci est le message que j'ai en retour.
{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


Maintenant ma/mes questions.
Je cherche donc à me connecter à un LDAP. En anonyme ca marche très bien. Mais dès que je tente avec un mot de passe crypté en SSHA, la ca ne marche plus. Problématique. J'en ai besoin. Suite à une identification réussit, je lancerais différentes démarches qui ne sont pas encore implantés. Chaque chose en son temps.

Après pas mal de recherches, mon problème viens du Mot de passe. Que je n'arrive hélas pas à résoudre. Je fais donc appel à vos connaissances, dans l'espoir d'obtenir une aide suffisante pour résoudre ce souci très pénible pour moi.

Pour information, j'ai lu pas mal de documentation, c'est d'ailleurs grâce à ca que j'ai pu pondre ce script. J'ai utilisé divers forums. Et même celui la. J'ai vu un poste similaire, mais pas de solution. C'est une sorte de relance. Apparemment je ne suis pas le seul à ne pas comprendre ce genre de problème.

Cordialement dans l'espoir qu'on trouve une solution.

Merci :)

5 réponses

silennnce Messages postés 4 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 19 août 2009
17 août 2009 à 22:50
Petit up et petite précision si ca peut aider.

Mon site est hébergé sur un Fedora 8....
0
MasterCent Messages postés 83 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 14 décembre 2011 1
19 août 2009 à 10:15
Salut Silennnce,

Je bosse depuis hier sur le même problème,
A savoir, utiliser LDAP pour authentifier une personne.

Quelle est la stratégie que tu défends : un connexion avec le mot de passe ou un search sur une connexion anonyme ? Perso, je cherche du côté de la connexion authentifiée.

@+

MC
0
MasterCent Messages postés 83 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 14 décembre 2011 1
19 août 2009 à 10:30
J'ai réussi une authentification :

J'ai d'abord fait une connexion anonyme, afin de connaitre le VRAI dn de mon ldap, avec une recherche sur la personne qui veut s'authentifier ( un peu comme ton code)

j'ai ensuite demandé la valeur du [dn] => uid=XXX,ou=Users,dc=XXX,dc=be

J'ai donc fait écrit la ligne de code
$dn = "uid=XXX,ou=Users,dc=XXX,dc=be"
puis tenté un
ldap_bind ( $conn , $dn , $pass ) ; // et c'est passé.

Reste à étudier le cryptage du mot.

bat

mc
0
silennnce Messages postés 4 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 19 août 2009
19 août 2009 à 11:31
Salut master cent.

Je travail sur une connexion authentifiée aussi.Pour mes tests j'utilise un compte compte perso qui à les accès admin.

Aujourd'hui je suis repartis sur des test avec une connexion anonyme. Pour l'instant mes résultats sont les mêmes :)

De ce que je crois comprendre dans ce que tu fais, et qui marcherait. Tu fais 2 ldap_bind? 1 premier pour récupérer les informations dn de l'utilisateur qui veut se connecter. Et un 2eme mais non anonyme avec le dn trouvé. ET ca ca marcherais chez toi?
Hum je testerais ca demain au boulot pour voir ce que ca donne chez moi. Mais j'avoue que je n'avais pas pensé à cette idée.
Pour ce qui est du mot de passe, normalement le code est bon... mais j'en saurais plus quand j'arriverais à cette étape.

Sinon aujourd'hui je me suis penché sur la fonction ldap_compare. Qui de ce que j'ai pu lire, serait une bonne fonction pour comparer des valeurs à celle du ldap. Je pense qu'elle devrait être présente pour le mot de passe par exemple...Mais pour faire des tests, on peut comparer le login... Qui lui n'est pas crypté.Et possible qu'avec cette fonction, 1 seul ldap_bind suffirait...

En tout cas merci d'être venu répondre sur le poste. Je me sens beaucoup moins seul :) Je donne des news demain (soir pour vous ^^)

PS: Je vie avec 9h de décalage horaire. Actuellement j'ai finis la mienne :) D'où le fait que je pourrais tester que demain...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
silennnce Messages postés 4 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 19 août 2009
19 août 2009 à 11:33
Ça me parait évident maintenant, mais j'avais vraiment pas pensé à utiliser le résultat du dn recherché qui peut être plus juste que celui rentré manuellement... Impatient de vérifier ca.
0
Rejoignez-nous