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

Bibliothèques et frameworks PHP Discussion :

[LDAP] Authentification basée sur active directory


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut [LDAP] Authentification basée sur active directory
    Salut
    je travaille sur un projet d'intranet et j'aimerais que l'authentification se base sur l'active directory mais le problème c'est que je suis perdu entre les fonctions ldap. Voici mon code :
    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
     
    <?php
    if(isset($_POST['go']) && $_POST['go'] == 'Validez')
    {
    	if(!empty($_POST['login']) && !empty($_POST['pwd']))
    	{
    	$ldapdn = mysql_real_escape_string(strtolower($_POST['login'])) . '@domain_name';
    	$ldappwd = mysql_real_escape_string(strtolower($_POST['pwd']));
     
    	// Connexion au serveur
    	$cnx = ldap_connect('adress_ip', 389);
    	ldap_set_option($cnx, LDAP_OPT_PROTOCOL_VERSION, 3);
    	// la racine de base
    	$racine = 'OU=Personnel,DC=mon service,DC=ma compagnie';
     
    		if($cnx)
    		{
    			if(ldap_bind($cnx, $ldapdn, $ldappwd))
    			{
    			$_SESSION['login'] = $ldapdn;
    			sleep(1);
    			header('location: http://adresse_ip/helpdesk/index.php?page=cpublic');
    			exit;
    			}
    			else
    			{
    			echo 'Login invalide !';
    			header('location: http://adresse_ip/helpdesk/index.php?page=cnx');
    			exit;
    			}
    		}
    	// Déconnexion
    	ldap_close($cnx);
    	}
    	echo 'Merci de remplir les champs obligatoires';
    }
     
    ?>
    il suffit d'utiliser la fonction ldap_bind ou ajouter un autre controle.
    merci de votre aide

  2. #2
    Membre chevronné Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    Je pense que tu as déjà un soucis au niveau de ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ldap_bind($cnx, $ldapdn, $ldappwd)
    ldap_bind prend en 2eme argument un DN ( ex :CN=Nom Prenom ,OU=Personnel,DC=mon service,DC=ma compagnie )

    Pour de l'authentification LDAP j'utilise une méthode particulière en 5 étapes :

    1ère étape : Formulaire avec demande du Login Windows et Mot de passe Windows
    2ème étape : Connexion à l'AD avec un utilisateur spécifique et fixe ( un utilisateur fantome n'existant que pour ca et ayant juste des droit en lecture dans mon exemple l'utilisateur TEST)
    3ème étape : Recherche dans l'AD du DN correspondant au Login Windows
    4ème étape : Essaie de connection a l'AD avec le DN trouvé et le Mot de passe Windows
    5ème étape : déconnexion

    Et voila en gros ce que cela donne :

    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
     
     
    	// Parametre de connexion de l'utilisateur TEST
     
    	$server = "192.168.0.1";
    	$port = "389";
    	$racine = "OU=Utilisateurs,DC=google,DC=com"; // 
    	$rootdn = "CN=Test Test,OU=Utilisateurs,DC=google,DC=com";
    	$rootpw = "google";
     
    	// Parametre de la personne se loguant
     
    	 $rootdn_util = ""; // distinguishedName ou DN
    	 $rootpw_util = $pass; // le Mot de passe Windows du formulaire
     
    	 // Connexion à l'AD
    	$ds = ldap_connect($server,$port);
    	if ($ds)
    	{
                    // Bind à l'AD avec l'utilisateur TEST
    		$db = ldap_bind($ds,$rootdn,$rootpw);
    		if ( $db )
    		{
                            // Recherche à partir du login le DN
    			$sr = ldap_search($ds,$racine,'(&(objectclass=person)(sAMAccountName='.$login.'))');
    			$info = ldap_get_entries($ds,$sr);
    			if ( $info['count'] > 0)
    			{
    				//echo 'Utilisateur trouvé<br/>';		
    				$rootdn_util = $info[0]['distinguishedname'][0];
     
     
    				// On rebind sur ce nouvel utilisateur
    				if ( ldap_bind($ds,$rootdn_util,$rootpw_util))
    				{
    					//l'utilisateur se trouve bien dans l'AD
     
    				}
    				else echo 'Mauvais Mot de passe';
     
     
    			}
    			else echo 'Utilisateur non trouvé';
    			ldap_unbind($ds);
     
    		}
    		else echo 'ldap_search failed retour : '.$db;
    	}
    	else echo 'ldap_connect failed retour :'.$ds;

    Niveau fonction :

    ldap_connect : engage une connexion avec le server ldap
    ldap_bind : se connecte au server ldap avec un identifiant mot de passe
    ldap_search : fait une recherche sur le server ldap
    ldap_fet_entry : récupère dans un array les résultats d'une recherche
    ldap_unbind : se déconnecte

    J'espère que ca t'aidera, il faut s'y connaitre un peu en LDAP et adresse LDAP pour manier ceci.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    merci francoisIT c'est très gentil de ta part
    pour la 2ème étape, si je comprends bien, il doit se connecter en tant que admin pour checker si un user existe ou pas.
    merci de votre aide.

  4. #4
    Membre chevronné Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    Non pas forcement en admin, mais il suffit d'un utilisateur quelconque ( Il doit pouvoir se connecter a l'AD via LDAP et avoir un acces en lecture a l'annuaire, ce qui est le cas de la plupart des comptes ) .

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Citation Envoyé par francoisIT
    Non pas forcement en admin, mais il suffit d'un utilisateur quelconque ( Il doit pouvoir se connecter a l'AD via LDAP et avoir un acces en lecture a l'annuaire, ce qui est le cas de la plupart des comptes ) .
    merci beaucouq ca marche mais le problème c'est que j'arrive pas à recuperer les attributs de la personne qui se connecte et pour info, j'ai essayé d'utliser le resultat de la fonction ldap_get_entries mais toujours le meme problème.
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // $sr est le resultat de la recherche
    $info = ldap_get_entriess($cnx, $sr);
    if ( $info['count'] > 0)
    echo $indo[0]['displyName'][0]; // s'affiche rien
    merci de votre aide

  6. #6
    Membre chevronné Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    Pour les attributs, le mieux à faire c'est :

    Tu va voir tout ce qu'il te génère et comment récupérer l'information que tu veux. Attention c'est un peu le bordel .

    Et attention tu as mis $indo au lieu de $info sur ton poste.

    Sur mon AD l'attribut displayName se récupère comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $info[0]['displayname'][0]  // en miniscule !

Discussions similaires

  1. Authentification SASL sur Active Directory
    Par Zelltemplar dans le forum Administration système
    Réponses: 3
    Dernier message: 14/09/2012, 12h11
  2. Implémenté une authentification sur ACtive Directory via Kerberos5 et LDAP
    Par arnaudperfect dans le forum RedHat / CentOS / Fedora
    Réponses: 1
    Dernier message: 01/07/2010, 13h04
  3. Réponses: 2
    Dernier message: 06/02/2006, 09h28
  4. Ldap sur Active Directory de W2003 avec IpWorks
    Par Gyles2 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 08/10/2004, 11h46
  5. Ldap sur Active Directory de Win2003 avec IpWorks
    Par Gyles2 dans le forum Développement
    Réponses: 1
    Dernier message: 08/10/2004, 11h44

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