begin process at 2010 02 10 16:44:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

AU SECOURS !!!

 > 

Pb d'authentification ldap


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pb d'authentification ldap

lundi 10 mai 2004 à 15:08:01 | Pb d'authentification ldap

cecillon

Salut à tous,

Voila, j'ai un gros problème en php. J'essaye de me connecter depuis un serveur apache sous linux à l'annuaire LDAP d'un serveur de domaine windows.
J'ai suivi pas mal de tutoriaux sur le net pour pouvoir me connecter mais je n'arrive pas à m'authetifier avec un mot de passe.
Apparament, je ne fais pas appel au bon objet. Enfin, j'en sais rien.

Voici mon petit code :

$server = "ldap://adr_srv_win";
$port = "389";
$chaine = "dc=XXX,dc=XXX,dc=fr";
$login = "cn=administrateur,cn=users,dc=XXX,dc=XXX,dc=fr";
$pass = "XXX";
$login1 = "CN=XXX,OU=XXX,OU=XXX,OU=XXX,DC=XXX,DC=XXX,DC=fr";
$password = "XXX";
echo "Connexion LDAP...<br>";
$ds = ldap_connect($server);
if($ds!=0)
{
$r = ldap_bind($ds,$login,$pass);
if($r)
{
echo "authentifié !!!<br>";
echo "Récupération des entrées : <br>";
$filtre="(|(sn=$personn*)(cn=$personn*)(userPassword=$personn*)(ntpassword=$personn*))";
$restriction = array("cn","sn","mail","userPassword","ntpassword");
$sr = ldap_search($ds,$chaine,"distinguishedName=".$login1."");
$nombre = ldap_count_entries($ds,$sr);
print $nombre." enregistrements trouvés<br>";
print("Récupération des entrées...<br>");
$info = ldap_get_entries($ds,$sr);
for($i=0;$i<$info["count"];$i++)
{
echo "nom (sn): ".$info[$i]["sn"][0]."<br>";
echo "Prénom (cn): ".$info[$i]["cn"][0]."<br>";
echo "Password : ".$info[$i]["ntpassword"][0]."<br>";//marche pas !!!!!
}
else
{
echo "echec authentification";
}
echo "Déconnexion<br>";
ldap_close($ds);
}

le problème est que pour identifier une personne, il faut login et mot de passe. En l'occurence, je suis incapable de retrouver le mot de passe. Si quelqu'un sait comment faire...

Merci d'avance

Sig
sigfridcecillon@cira-concept.fr
mardi 11 mai 2004 à 09:04:25 | Re : Pb d'authentification ldap

ADPro22

Pour identifier une personne, la solution simple est la suivante :
se connecter en admin pour trouver le dn correspondant au login de l'utilisateur, puis faire un bind avec son dn et son mot de passe.

sinon, pour les mots de passe ldap, ils sont stockés sur 2 champs :
lmPassword et ntPassword

Cordialement,

ADPro22
mardi 11 mai 2004 à 10:46:08 | Re : Pb d'authentification ldap

cecillon

j'essaye de rentrer les champs lmPassword et ntPassword
mais dans les deux cas, je n'arrive pas à accèder aux mots de passe.

Est ce qu'il y aurait pas quelque chose à faire sur le serveur de domaine windows ou sur Linux pour pouvoir y accèder ?

Merci pour tout,

Sig
sigfridcecillon@cira-concept.fr
vendredi 14 mai 2004 à 11:36:33 | Re : Pb d'authentification ldap

Fantomas33


Bonjour,

voici une page de login que j'ai fais il y a un petit moment avec identification ldap, je pense qu'elle peut t'aider.
Bon courage.




require 'globals.php';
$error_login = false;
$titre = $string_lang['CLINET_TITLE'][$lang] ;

if( !isset($PHP_AUTH_USER) ) {
/* Aucune session n'est ouverte : on affiche la demande d'autentification */
header( "WWW-Authenticate: Basic realm=\"$titre\"");
header( "HTTP/1.0 401 Unauthorized");
echo "<p class=\"error\" style=\"color : red;font-weight : bold;\">\n";
echo "Accès refusé suite à abandon \n";
echo "<br />\n";
echo "<a href=$PHP_SELF>Cliquez ici pour vous identifier de nouveau</a>";
echo "</p>\n";
exit;
} else {
/* aucune session ouverte on vérifie les paramètres de connexion envoyés */
//require 'tools_ldap.php';
/* ne marche pas espace, ligne vide et header */

//Variable conditionnant l'identification'
// $droit_user null (user+password incorrect ) => se reidentifier
// 1 (pas de password ou
// password et pas bon groupe )=> visu seulement
// 2 (password et bon groupe ) => maj


//Connexion au serveur LDAP
// $ldapconn = ldap_con($LDAP) ; // si tools_ldap est ok mais non !
//Connexion au serveur LDAP
$ldapconn = ldap_connect( $LDAP['host'], $LDAP['port'] )
or die( "Impossible de se connecter au serveur LDAP {$LDAP['host']}" );

if ($ldapconn) {
if ($PHP_AUTH_PW == NULL) {
// password null donc connexion anonyme
$droit_user = 1 ;
$ok = TRUE ;
} else {
// on determine la liste des ou dans laquelle rechercher les connexions
//$ldap_ou = ldap_list_unit($LDAP, $ldapconn) ;
// si tools_ldap est ok mais non !
//////////////////////////////////////////
/// pas génial, ici copie du corps de la fonction ldap_list_unit de tools_ldap
///
/// RECHERCHE de tous les 'ou' de l'annuaire, stockés dans $ldap_ou[]
///
$ldap_incorrect[] = "ou=RESEAU" ;
$ldap_incorrect[] = "ou=Postesdetravail" ;
$ldap_incorrect[] = "ou=SLPDEFAULT" ;
$ldap_incorrect[] = "ou=WebAccess" ;
$ldap_incorrect[] = "ou=Software" ;
$ldap_incorrect[] = "ou=APPLICATIONS" ;

if ($ldapconn) {
//Connexion au serveur LDAP anonyme
$ldapbind = @ldap_bind($ldapconn);
// le @ pour masquer les messages retour
if ($ldapbind ) {
// bind reussi, reste à connaitre TOUS LES OU
// on reinitialise le tableau existant
unset($ldap_ou) ;
// et on rajoute la racine, cas des users admins ldap
$ldap_ou[] = $LDAP['racine'] ;
$filtre = "objectclass=organizationalUnit" ;
$colonnes = array( "ou") ;
$cn = $LDAP['racine'] ;
$ldapsearch = ldap_search($ldapconn, $cn, $filtre, $colonnes );
// if ( $ldapsearch == FALSE ) { echo "Ldap search incorrect" ; }

$info = ldap_get_entries($ldapconn, $ldapsearch);
for ($i=0;$i<$info["count"];$i++) {
$atraiter = TRUE ;
// il faut éliminer certains ou
foreach ( $ldap_incorrect as $ou ) {
if ( substr_count($info[$i]["dn"],$ou) != 0 ) {
$atraiter = FALSE ;
break ;
}
}
if ( $atraiter ) {
$ldap_ou[] = $info[$i]["dn"];
}
} // fin boucle analyse des ou
} // fin ldapbind true
} // fin if ldapconn

////////////////////////////////////////
//Connexion au serveur LDAP non anonyme puisque user et password connu
// on teste la connexion user sur chaque ou, on sort au premier réussi
$ok = FALSE ;
foreach ( $ldap_ou as $ou ) {
$cn = "cn=".$PHP_AUTH_USER.",".$ou ;
//$racine = $ou.",o=GDB" ; pour un search tous agents
$ldapbind = @ldap_bind($ldapconn, $cn ,$PHP_AUTH_PW);
// le @ pour masquer les messages retour
if ($ldapbind ) {
//echo "connexion reussie sur ".$cn."<br>" ;
$ok = TRUE ;
break ;
}
}

if ( !$ok ) {
$droit_user = NULL ;
// il faut se reidentifier
} else {
// bind reussi, reste à connaitre les groupes
// utiliser racine tous agents ou cn un agent
$filtre = "objectclass=person" ;
$colonnes = array( "sn", "dn","groupmembership") ;
$ldapsearch = ldap_search($ldapconn, $cn, $filtre, $colonnes );
$info = ldap_get_entries($ldapconn, $ldapsearch);
// print_r($REMOTE_ADDR) ; pour adresse ip
$droit_user = 1 ;
for ($i=0;$i<$info[0]["groupmembership"]["count"];$i++) {
//$ldap_habilite groupe habilite cf globals
if ( $info[0]["groupmembership"][$i] == $LDAP['habilite'] ) {
$droit_user = 2 ;
break ;
}
}
} // fin else ok true
} // fin else password not null
// on ferme la connexion au serveur LDAP
// ldap_disconnect($ldapconn); // si tools_ldap est ok mais non !
ldap_close($ldapconn);
} // fin if ldapconn

if ($ok) {
session_start();
$_SESSION['member_id'] = $PHP_AUTH_USER ;
$_SESSION['droit_user'] = $droit_user;
header("Location:$back");
} else {
$error_login = true;
//
// $admin = $ADMIN_CLINET ;
// $subject = rawurlencode(sprintf("[CLINET] %s", $string_lang['SESSION_GET_NEW_ACCOUNT'][$lang]));
// $body = rawurlencode(sprintf($string_lang['SESSION_GET_NEW_ACCOUNT_MSG'][$lang]));
// $mailto = sprintf("mailto:%s?subject=%s&body=%s", $admin['email'], $subject, $body);
// $ligne = sprintf("%s<a href=\"%s\">%s</a> (%s).\n", $string_lang['SESSION_GET_NEW_ACCOUNT_HOW'][$lang], $mailto, ($admin['prénom'] . " " . $admin['nom']), $admin['login']);

header( "WWW-Authenticate: Basic realm=\"$titre\"");
header( "HTTP/1.0 401 Unauthorized");
echo "<p class=\"error\" style=\"color : red;font-weight : bold;\">\n"
.$string_lang['SESSION_INCORRECT_LOGIN'][$lang]
."\n"."<br />\n"
.$ligne."<br />\n"
."<a href=$PHP_SELF>Cliquez ici pour vous identifier de nouveau</a>"
."</p>\n";
exit;
}
}

vendredi 1 juillet 2005 à 14:21:57 | Re : Pb d'authentification ldap

mole

Bonjour à tous,

Le sujet date mais mon script pourra peut-être aider quelqu'un...

En plus, de vérifier l'authentification du l'utilisateur, je teste s'il fait parti d'un groupe LDAP autorisé :

<?php

// Paramètres LDAP
$dn = "dc=mondomaine, dc=fr";
$ldap_ous=array("ou=Administratreurs, ","ou=Exploitants, ");
$ldap_domaine="mondomaine.fr";
$ldaphost= "serveur-ldap".$ldap_domaine;
$ldapport= 389;

// Compte de connexion au Ldap
$ldap_admin="compte_admin";
$ldap_pwd="pwd_admin";

//Groupe des utilisateurs autorisés
$ldapgroup ="CN=Test PHP,OU=Groupes,DC=mondomaine,DC=fr";

// Connexion au Ldap
$ldapconn = ldap_connect( $ldaphost, $ldapport )
or die( "Impossible de se connecter au serveur LDAP {$ldaphost}" );
$ldapbind = ldap_bind($ldapconn,$ldap_admin,$ldap_pwd)
or die( "Authentification au serveur LDAP {$ldaphost} échouée" );

// Boucle d'authentification
$auth=false;
// Test du contenu du formulaire de login : bien vérifier si le champ pass n'est pas vide
if (isset($_POST['user']) && isset($_POST['pass']) && !empty($_POST['pass'])) {
foreach(
$ldap_ous as $ou){ // Parcours de toute les OUs pour ...
$sr=@ldap_search($ldapconn, $ou.$dn, "sAMAccountName=".$_POST['user']); // Rechercher l'utilisateur
if($sr!= false){
$info = @ldap_get_entries($ldapconn, $sr); // Obtenir ses infos
if($info['count']==1){
foreach(
$info[0]['memberof'] as $group){ // Parcourir ses groupes
if($group==$ldapgroup){
// Si l'utilisateur fait parti du groupe autorisé, alors on tente une connexion Ldap avec son Compte
$auth=@ldap_bind($ldapconn,$_POST['user']."@".$ldap_domaine,$_POST['pass']);
if(
$auth==true) break;
}
}
if
($auth==true) // Si authentification OK : envoi vers la page Web
header("location: site.html");
}
}
}
if(
$auth==false) header("location: auth_ldap.html"); // si authentification KO : retour au Login
}else {
echo
'Veuillez entrer un compte et mot de passe.';
}
?>



Cette discussion est classée dans : echo, cn, dc, xxx, ldap


Répondre à ce message

Sujets en rapport avec ce message

ldapsearch avec php [ par harbaouiawatef ] salut ,j'ai un script php son but est d'executer la commande ldapsearch alors monproblème est le suivant:lorsque j'execute mon script il m'affiche tou php et ldap [ par skoukni_brahim ] Bonjour, j'essaiye d'exécuter le script suivant "Test LDAP n° 1"; echo "Connexion ..."; $ds = ldap_connect ("localhost"); echo "Le résultat est ".$ds. ldap_search jamais de resultat [ par guth42 ] Bonjour, je suis pas mal ennuyé, ça va faire 3j que je me bat sans résultats, c'est pour cela que je fait appele a de bonnes ames... je suis en train [prb] : ajout dans LDAP [ par Renus02 ] Bonjour, j'ai le probleme suivant, j'utilise l'annuair LDAP (openLdap) et je fait la connexion avec les librairie DB de Pear, le prb c'est que la con Recherche ldap [ par Assyris ] Bonjour, voila mon problème : L'application marchais très bien jeudi dans la journée, je l'ai testée et tout, mais en revenant au boulot lundi, j'ai conf ldap [ par haifoufa ] j'ai un problème qui me gène depuis deux jours et je ne trouve pas de solutionje suis inspétrer de site commentcamarche mais sans vain.j'ai modifié le probléme [ par termifr ] $pagedemande=$_GET['page'];$nombreactu='5';mysql_connect("xxx", "xxx", "xxx");mysql_select_db("xxx");$retour = mysql_query("SELECT COUNT(*) AS nbre_en autre probléme lecture mysql [ par termifr ] $pagedemande=$_GET['page'];$nombreactu='5';mysql_connect("xxx", "xxx", "xxx");mysql_select_db("db192993600");$retour = mysql_query("SELECT COUNT(*) AS Problème avec ldap_search [ par Xmemy ] Bonjour à tous, J'ai comme qui dirais un petit problème avec la fonction ldap_search... Je n'arrive pas à faire la recherche. Voici mon code : <?ph recherche sur un serveur ldap : probleme [ par bullrot1985 ] Bonjour a tous.J'ai un soucis au niveau de ma requete php sur mon serveur ldap.Je vous poste une photo de mon active directory et de mon script...j'ai


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,522 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales