PHP & l'active directory

Mammouth du PHP | 737 Messages

22 déc. 2009, 12:19

Bonjour,

Navré de voir que PHP France ait été victime de malveillance. J'espère que le ou les auteurs de ces actes frauduleux seront retrouvés et sévèrement réprimandés.

Je reviens donc avec mon souci de ldap, php et active directory.

Je n'arrive pas à faire le lien entre la précieuse aide qui m'avait été apportée et mon cas.
<?php
$_account_suffix = "@chezmoi.fr"; //"@domaine.com";
$_base_dn = "DC=chezmoi,DC=fr"; //"DC=domaine,DC=com";
$_domain_controllers = array ("ldap://le_serveur_ldap/"); //array ("ldap://SERVEURLDAP");

require_once("adLDAP.php");

try {
        $adldap = new adLDAP($options);
} catch (adLDAPException $e) {
        echo $e; exit();  
}
                       
$user = "le_login"; //$_POST["user"];
$user_password = "le_mot_de_passe"; //$_POST["user_password"];
                       
//try to authenticate user in Active Directory
if($adldap->authenticate($user,$user_password)) {
        echo "L'utilisateur ".$user." est bien authentifié.";
        $_SESSION["user"] = $user;
} else {
        echo "L'utilisateur ".$user." n'est pas authentifié.";
        echo "<br /><a href=\"ldap3_index.php\">Retour à la saisie</a>";
}

?>  
Pour info l'application est sur un serveur et les comptes ldap dans un groupe nommé theldapusers sur un autre serveur du coup je ne sais pas bien comment renseigner cette partie et faire le lien :
$_account_suffix = "@chezmoi.fr"; //"@domaine.com";
$_base_dn = "DC=chezmoi,DC=fr"; //"DC=domaine,DC=com";
$_domain_controllers = array ("ldap://le_serveur_ldap/"); //array ("ldap://SERVEURLDAP");
Amicalement,

Mega
;)
Dyslexics are teople poo

Mammouth du PHP | 568 Messages

22 déc. 2009, 12:46

Salut Mega,

Bon ça n'avance pas vraiment ton soucis là,

Qu'est ce qui ce passe? message d'erreur ou tout simplement le message
echo "L'utilisateur ".$user." n'est pas authentifié."
??

Attention à la casse sur le login et le mot de passe...

Sinon ce que je te propose, c'est de faire du pas à pas afin de voir ce qui ne fonctionne pas.

Pour cela, tu laisse tomber pour le moment la classe que je t'ai filer et via un autre script tu t'attèle à faire fonctionner les méthodes ldap de PHP via la méthode http://www.php.net/manual/en/function.ldap-connect.php

Exemple:
// LDAP variables
$ldaphost = "ldap.example.com";  // your ldap servers
$ldapport = 389;                 // your ldap server's port number

// Connecting to LDAP
$ldapconn = ldap_connect($ldaphost, $ldapport)
          or die("Could not connect to $ldaphost");
Parceque ça ne sert à rien d'aller plus loin, tant que tu n'arrive pas à te connecter.

Mammouth du PHP | 737 Messages

22 déc. 2009, 13:26

COOL YOSH, je ne pensais pas te revoir :)

Merci de ton aide et de ta patience. C'est vrai que je maitrise pas pour le coup.

En fait, j'ai essayé pas mal de choses et j'ai un pote qui a géré le souci et m'a montré que la connexion se faisait en direct via : cn=le_user,ou=le_groupe_du_user et impossible de placer ce "ou" car je pensais que tout venait de là. Après il s'est avéré aussi qu'on m'avait filé des comptes sans respecter la casse et ça doit forcément avoir son incidence donc impossible de savoir si c'est moi qui merde ou si c'est les infos qu'on me donne qui sont fausses. tu vois le truc..? :roll:

Je suis d'accord pour reprendre à la base si tu veux bien.
<?php 
// LDAP variables
$ldaphost = "nom_du_serveur_ldap";  // your ldap servers
$ldapport = 389;                 // your ldap server's port number

// Connecting to LDAP
$ldapconn = ldap_connect($ldaphost, $ldapport)
          or die("Could not connect to $ldaphost");

?>
me renvoie une page blanche donc ca semble marcher (pour info je travaille en local)


Ensuite :
<?php
// using ldap bind
$ldaprdn  = 'un_compte';     // ldap rdn or dn
$ldappass = 'le_mdp_associé';  // associated password

// connect to ldap server
$ldapconn = ldap_connect("le_serveur_ldap")
    or die("Could not connect to LDAP server.");

if ($ldapconn) {

    // binding to ldap server
    $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

    // verify binding
    if ($ldapbind) {
        echo "LDAP bind successful...";
    } else {
        echo "LDAP bind failed...";
    }

}

?>
me renvoie :
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server in C:\wamp\www\monsite\index.php on line 36
LDAP bind failed...
ligne 36 :
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
:?
Dyslexics are teople poo

Mammouth du PHP | 568 Messages

22 déc. 2009, 13:45

COOL YOSH, je ne pensais pas te revoir :)
Je suis là tout les jours, quasiment, donc pas de soucis...

Le ldap_bind prend en paramètre; la connexion LDAP puis un user ayant les droits de lire l'AD + son mot de passe, par exemple, mon loggin dans l'AD est POLIYO00 mais je ne bind pas le serveur ldap avec ce compte, mais avec un compte de service qui lui à le droit de le faire.
// using ldap bind

$ldaprdn ="cn=USRTALAD,OU=Comptes de Services,dc=domain,dc=com";
$ldappass = "mot_de_passe";	
	
// connect to ldap server
$ldapconn = ldap_connect("ldap://IP_du_serveur_LDAP") or die("Could not connect to LDAP server.");
	
if ($ldapconn) {
	
	// binding to ldap server
	$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
	
	// verify binding
	if ($ldapbind) {
			echo "LDAP bind successful...";
	} else {
			echo "LDAP bind failed...";
	}	
}
EDIT: tu peux aussi taper le serveur en anonyme en enlevant le compte (mais il faut que ton serveur LDAP soit configuré pour sinon ça ne fonctionne pas), par exemple:
<?php
$ldapconn = ldap_connect("ldap://IP_du_serveur_LDAP") or die("Could not connect to LDAP server.");
	
if ($ldapconn) {
	
	// binding to ldap server
	$ldapbind = ldap_bind($ldapconn);
	
	// verify binding
	if ($ldapbind) {
			echo "LDAP bind successful...";
	} else {
			echo "LDAP bind failed...";
	}
	
}
Modifié en dernier par Yosh le 22 déc. 2009, 14:34, modifié 1 fois.

Mammouth du PHP | 568 Messages

22 déc. 2009, 14:32

Bon, l'upload de document n'a pas l'air de fonctionner...donc je te conseille de lire le document à cette adresse, il t'aidera à y voir un peu plus clair...

http://beaussier.developpez.com/articles/php/ldap/

Mammouth du PHP | 737 Messages

06 janv. 2010, 17:30

Hello Yoshi !

I'm back l'ami. Les affaires reprennent ;)

mais avant tout, bonne et heureuse année 2010 !!!!!!!!
Dyslexics are teople poo

Mammouth du PHP | 568 Messages

06 janv. 2010, 18:06

Hello Yoshi !

I'm back l'ami. Les affaires reprennent ;)

mais avant tout, bonne et heureuse année 2010 !!!!!!!!
Salut Mega,

C'est pas trop tôt ^^

Meilleurs vœux à toi et à tous d'ailleurs.

Mammouth du PHP | 737 Messages

07 janv. 2010, 18:15

Salut mon super Dino ^^

Bon je suis reparti de ce script qui me semble simple et fonctionnel.

Voici les infos en ma possession et comment j'ai attribué mes valeurs :

Serveur LDAP ----------------------------
DNS : laliasdns.clients.maboite.fr
SON IP : XX.XXX.XXX.XX
--------------------------------------------

Sur ce serveur LDAP --------------------
Les comptes se trouvent dans : Comptes consolidés
Ci-contre un user : user1
Son mot de passe : !Le_user1


Voici comment j'ai rempli le script :
$ldaprdn ="cn=user1,OU=Comptes consolidés,dc=maboite,dc=fr";//j'ai essayé de rajouter dc=clients (sans succès) 
$ldappass = "!Le_user1";    
      
$ldapconn = ldap_connect("ldap://XX.XXX.XXX.XX") or die("Could not connect to LDAP server.");//j'ai essayé l'IP ou la version DNS (idem rien)
       
if ($ldapconn) {
       
        $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
       
        if ($ldapbind) {
                        echo "LDAP bind successful...";
        } else {
                        echo "LDAP bind failed...";
        }      
}
En local, j'obtiens :
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server in C:\wamp\www\ldap2010\index.php on line 22
LDAP bind failed...
Ca correspond à la ligne : $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

J'ai également l'alias du serveur de l'appli et son appli.

Comme tu peux voir, c'est la misère. Ca mouline un poil plus mais rien. Je continue mes recherches...

Mega
;)
Dyslexics are teople poo

Mammouth du PHP | 737 Messages

20 janv. 2010, 15:20

Yoshi, t'es parti ?
Dyslexics are teople poo

Mammouth du PHP | 568 Messages

20 janv. 2010, 16:05

Yoshi, t'es parti ?
Non, je suis là ^^

Mais je vois pas trop comment t'aider si tu n'arrive même pas à te connecter à l'AD :(

Test la connexion anonyme, ce sera déjà un point de départ.

Cf. Exemple #2 Connexion anonyme à un serveur LDAP sur la page http://fr2.php.net/ldap_bind

Cela devrait déjà fonctionné, normalement, chez moi aucun soucis.

ET demande de l'aide sur la configuration AD à tes administrateurs réseaux si besoin es.

WalterB
Invité n'ayant pas de compte PHPfrance

22 janv. 2010, 22:11

Bonjour,

Je ne veux pas dire n'importe quoi puisque je n'ai pas de connaissances en ce qui concerne les fonctions ldap_* et je ne suis rendu qu'à 50% de ma formation en gestion de réseaux, mais la description de la fonction ldap_bind dit : "ldap_bind — Authentification au serveur LDAP". Alors si je comprend bien, en utilisant ldap_bind, tu utiliseras forcément le protocole ldap, alors je pense qu'il n'est pas nécessaire de mettre "ldap://". Essaie donc d'utiliser le nom de domaine ou encore directement l'adresse ip du contrôleur de domaine.

WalterB

Mammouth du PHP | 737 Messages

25 janv. 2010, 17:54

Bonjour et merci, je vais regarder ça dès que possible !

Ca commence à me prendre le chou :|

Mega
;)
Dyslexics are teople poo

Mammouth du PHP | 568 Messages

25 janv. 2010, 17:57

Bonjour,

Je ne veux pas dire n'importe quoi puisque je n'ai pas de connaissances en ce qui concerne les fonctions ldap_* et je ne suis rendu qu'à 50% de ma formation en gestion de réseaux, mais la description de la fonction ldap_bind dit : "ldap_bind — Authentification au serveur LDAP". Alors si je comprend bien, en utilisant ldap_bind, tu utiliseras forcément le protocole ldap, alors je pense qu'il n'est pas nécessaire de mettre "ldap://". Essaie donc d'utiliser le nom de domaine ou encore directement l'adresse ip du contrôleur de domaine.

WalterB
Effectivement, pas forcément besoin mais bon, ça ne mange pas de pain et ce n'est pas ça qui ne fait pas fonctionner le code de Mega.

Donc bon...

ViPHP
ViPHP | 5462 Messages

25 janv. 2010, 18:09

t'es sur que le LDAP est accesible via l'exterieur c'est rare qu'un LDAP soit sur DMZ, ou alors c'est un mirror synchro
dans ma boite pour accédé au LDAP c'est en local, donc l'adresse c'est genre : boite.root.priv

limite fait un netstat pour voir sur quelle serveur t'es connété

Mammouth du PHP | 568 Messages

15 mars 2010, 12:02

Nouvelle version de PHP Ldap (v3.3) qui essaye de récupérer comme un grand le DN;

http://adldap.sourceforge.net/download.php