Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] problème ldap

Posted by axolotus on 10/31/2011 20:23

Bonjour,

Je tente de me loguer avec jauth utilisant un driver ldap...

j'utilise jelix 1.3.

je dois mal configurer le auth.coord.ini.php car j'ai toujours une connexion refusée login failed quelques soit ma configuration. je sais pas ce qui merde...pourtant dans d'autre code n'utilisant pas jelix, je parviens à mme connecter au ldap...

comment obtenir des infos de ce que fait le driver ldap dans la debug bar : la requéte qu'il envoie si il en envoie une

Connaissez-vous un framwork plus accessible que jelix?

Si quelq'un peut m'aider... Merci d'avances

  [Opened] problème ldap

Reply #1 Posted by foxmask on 11/01/2011 16:31

Bonjour, Pour ma part, au boulot, l'arbre LDAP est trop particulier donc je me suis passé du driver jAuth pour gérer moi même les sessions/droits.

ps : faire du ldap n'est pas le plus simple pour découvrir un framework...


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: problème ldap

Reply #2 Posted by axolotus on 11/01/2011 18:55

merci pour ta réponse.

si je cherche un framework c'est pour plus me casser la tête avec toute ces problèmes de connexion , d'autorisation... si ça je peux pas le faire avec jelix ça réduit pas mal son intérêt

je galère pas mal avec jelix est-ce que tu connais un framework mieux documenté?

encore merci pour ton aide

  [Opened] Re: problème ldap

Reply #3 Posted by axolotus on 11/01/2011 19:42

Je ne vois quoi mettre search filter

l'erreur de la debugg bar est le suivant ldap configuration: search filter missing Code: 611

j'ai mis la configuration suivante :

;------- parameters for the "ldap" driver
[ldap]
; default "localhost"
hostname="172.16.0.253"
; default 389
port=

; DOMAIN\user or user@DOMAIN to connect with LDAP (user who has at least search right)
ldapUser=
; password used to connect with LDAP
ldapPassword=

; LDAP search params 
; search base, example for Active Directory: "ou=ADAM users,o=Microsoft,c=US"
searchBaseDN="ou=users,dc=blum,dc=fr"
; search filter, example for Active Directory: "(objectClass=user)"
searchFilter=
; attributes to retrieve for the search, example for Active Directory: "cn,distinguishedName,name"
searchAttributes="uid"

; name of the php function to crypt the password in the database
password_crypt_function=sha1
; if you want to use a salt with sha1:
;password_crypt_function = "1:sha1WithSalt"
;password_salt = "here_your_salt"

  [Opened] problème ldap

Reply #4 Posted by laurentj on 11/01/2011 21:40

Bonjour,

Tu dis que tu y arrives avec un script tout simple utilisant les fonctions ldap de php (ce que fait le driver ldap de jelix), dans ce cas, indique nous ce que tu fais pour te connecter, ça nous permettra alors de comprendre comment tu tests la validité d'un user et comment tu récupères ses infos.

Tu peux aussi regarder les sources du plugin ldap pour voir comment il agit. lib/jelix/plugins/auth/ldap/ldap.auth.php

  [Opened] Re: problème ldap

Reply #5 Posted by axolotus on 11/01/2011 21:52

Merci de ta réponse.

voici la fonction que j'utilise :

	//IDENTIFICATION A LA BASE LDAP
	//connexion au serveur ldap
	$ds=ldap_connect("172.16.0.253");
	ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3);
			
	//tester si on se connecte bien au serveur ldap
	if ($ds!=0){
		//établir une liaison au serveur ldap
		$r=ldap_bind($ds);
		$dn = "ou=users,dc=blum,dc=fr";
		$nameldap="uid=".$_POST['login'].",".$dn;
			
		//tester l'existence le login et le password
		$r=@ldap_bind($ds,$nameldap,$_POST['password']);
						
		if ($r){//cas ou les identifiant sont correctes
			$_SESSION['login']=$_POST['login'];
		}
		else{//cas ou les identifiants sont incorrectes
			//on teste pour savoir si le login existe
			$r=@ldap_bind($ds);//connexion au ldap anonyme
			$filtre="(cn=".$_POST['login'].")";
			$restreindre = array("cn");
			$sr=ldap_search($ds, $dn, $filtre);
			$info = ldap_get_entries($ds, $sr);
					
		        if($info["count"]==0){//cas ou le login n'existe pas dans ldap
				$message="votre nom d'utilisateur est incorrect.";
			}
			else $message= "votre mot de passe est incorrect.";
			
			}
			
					//clore la connexion ldap
					ldap_close($ds);
				}
				//dans le cas ou pas de connexion au serveur ldap
				else {
					$message="Impossible de se connecter au serveur LDAP";
				}
			}

  [Opened] Re: problème ldap

Reply #6 Posted by laurentj on 11/01/2011 21:58

Note aussi que tu indiques dans la config que le mot de passe doit être chiffré en sha1, et c'est sa forme chiffrée qui est passé à ldap_bind. Ce qui probablement ne doit pas être le cas. met donc password_crypt_function à vide.

searchBaseDN, cela doit contenir la chaine qui permet de faire la recherche du user lors de la connection ou pour récupérer ses infos.

Voir http://fr.php.net/manual/en/function.ldap-bind.php#105620 . Pour tester l'existence du user et son mot de passe, le plugin fait un ldap_bind avec comme rdn :

{uidProperty}={login},{searchBaseDN};

ce qu'il y a entre accolade étant remplacé par leurs valeurs respectives.

  [Opened] problème ldap

Reply #7 Posted by laurentj on 11/01/2011 22:04

Nos messages se sont croisés. ta config est bonne à part le password_crypt_function qui devrait être à vide.

pour le searchFilter, il est en fait utilisé pour lister les utilisateurs. il est utilisé pour l'argument $filter de ldap_search. Si tu n'as pas besoin de lister les utilisateurs dans ton appli, à la limite, met n'importe quoi...

  [Opened] Re: problème ldap

Reply #8 Posted by axolotus on 11/01/2011 22:15

pas plus de resultat avec cette config :

;------- parameters for the "ldap" driver
[ldap]
; default "localhost"
hostname="172.16.0.253"
; default 389
port=

; DOMAIN\user or user@DOMAIN to connect with LDAP (user who has at least search right)
ldapUser=
; password used to connect with LDAP
ldapPassword=

; LDAP search params 
; search base, example for Active Directory: "ou=ADAM users,o=Microsoft,c=US"
searchBaseDN="ou=users,dc=blum,dc=fr"
; search filter, example for Active Directory: "(objectClass=user)"
searchFilter="cn"
; attributes to retrieve for the search, example for Active Directory: "cn,distinguishedName,name"
searchAttributes="uid"

; name of the php function to crypt the password in the database
password_crypt_function=""
; if you want to use a salt with sha1:
;password_crypt_function = "1:sha1WithSalt"
;password_salt = "here_your_salt"

pas plus avec password_crypt_function=

J'essaie de trouver ou ça bloque dans le fichier lib/jelix/plugins/auth/ldap/ldap.auth.php mais je n'arrive pas à envoyer à partir de jlog vers la debugbar ni vers firebug ou m^me la console de chrome...

Merci pour ta réponse si rapide

  [Opened] Re: problème ldap

Reply #9 Posted by laurentj on 11/01/2011 22:27

Il semble que pour les connections anonymes, il faut appeler ldap_bind avec un seul paramètre, ce que ne fait pas le plugin ldap de jAuth, quand il veut récupérer les infos du user une fois que la vérification a été faite.

essaye de modifier le fichier ldap.auth.php comme ceci (format diff), dans la méthode verifyPassword :

@@ -226,7 +226,13 @@ class ldapAuthDriver extends jAuthDriverBase implements jIAuthDriver {
 
             if ($bind) {
                 //get connected user infos
-                if (ldap_bind($connect,$this->_params['ldapUser'], $this->_params['ldapPassword'])) {
+                if ($this->_params['ldapUser'] == '') {
+                    $bind = ldap_bind($connect);
+                }
+                else {
+                    $bind = ldap_bind($connect,$this->_params['ldapUser'], $this->_params['ldapPassword']);
+                }
+                if ($bind) {
                     if (($search = ldap_search($connect, $this->_params['searchBaseDN'], $this->_params['uidProperty'].'='.$login,$this->_params['searchAttributes'
                         if (($entry = ldap_first_entry($connect,$search))) {
 
Page
  1. Re: problème ldap