PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 16-01-2014 16:41:47

django_78
Membre
Inscription : 16-01-2014
Messages : 5

Probléme de connexion au site intranet

Bonjour,

je vous ecrit car cela fait un moment que j'ai un probléme de connexion a mon site intranet

je vous explique:

j'ai créé une page connexion_ldap.php ce code me permet de me connecter via un utilisateur créé dans LDAP

mais probléme ca ne marche pas et voila les erreurs qui me retourne

Connexion au serveur
Le résultat de connexion est Resource id #3
Utilisation de LDAPv3 Connexion authentifiée ...
Utilisateur authentifié avec succès !Recherche suivant le filtre (email=*@vernon27.fr)
Le résultat de la recherche est Resource id #4
LDAP-Errno: 0
LDAP-Error: Success
Le nombre d'entrées retournées est 0

Lecture de ces entrées ....

Données pour 0 entrées:


Warning: ldap_get_attributes() expects parameter 2 to be resource, boolean given in C:\Program Files\EasyPHP-12.1\www\Intranet-2\connexion_ldap.php on line 87
attributs dans cette entrée :


Notice: Undefined variable: groupes in C:\Program Files\EasyPHP-12.1\www\Intranet-2\connexion_ldap.php on line 120
Fermeture de la connexionOK Auth USER

Notice: Undefined variable: groupes in C:\Program Files\EasyPHP-12.1\www\Intranet-2\connexion_ldap.php on line 147

Notice: Undefined index: nom in C:\Program Files\EasyPHP-12.1\www\Intranet-2\connexion_ldap.php on line 148

Notice: Undefined index: prenom in C:\Program Files\EasyPHP-12.1\www\Intranet-2\connexion_ldap.php on line 149

Notice: Undefined variable: groupes in C:\Program Files\EasyPHP-12.1\www\Intranet-2\connexion_ldap.php on line 152
Vous n'avez pas de droit d'utilisation.
Retour



et voila mon code


<?php
// Connexion a mysqli
$link = mysqli_connect("localhost", "root", "", "intra")or die("Impossible de se connecter : " . mysqli_error());
 
//$baseDN = 'cn=users, dc=vernon27, dc=local';
$baseDN = 'OU=Services, DC=vernon27, DC=local';
$ldapServer = '172.20.1.3';
$rdn = 'intra_ldap';
$mdp = '123456';
$user = "cn=".$_POST['login'];
$password = $_POST['password'];
$admin="admin";  // indiquez ici le groupe auquels appartient les admin et les membres. dans mon exemple, j'ai un o=admin et un o=membres.
$membres="membres";

  // Connexion au serveur
  echo "Connexion au serveur <br />";
  $conn=ldap_connect($ldapServer);

  // on teste : le serveur LDAP est-il trouvé ?
  if ($conn)
  {
    echo "Le résultat de connexion est ".$conn ."<br />";
  }
  else
  {
    die("connexion impossible au serveur LDAP");
  }

// 2ème étape : on effectue une liaison au serveur, ici de type "anonyme" pour une recherche permise par un accès en lecture seule

  // On dit qu'on utilise LDAP V3, sinon la V2 par défaut est utilisé et le bind ne passe pas.
  if (ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3))
  {
    echo "Utilisation de LDAPv3 \n";
  }
  else
  {
    echo "Impossible d'utiliser LDAP V3\n";
    exit;
  }
 
  print ("Connexion authentifiée ...<br />");
  $bindServerLDAP=ldap_bind($conn,$rdn,$mdp);
 
  // nom d'utilisateur
  $identifiant = $_POST['login'];
   
  // mot de passe utilisateur
  $auth_pass = $_POST['password'];
   
  // nom de domaine
  $domaine = "VERNON27.local";
 
 
  // nom d'utilisateur + @ + nom de domaine
  $auth_user = $identifiant."@".$domaine;
 
 
  // resultat de connexion
  if (!($bind=@ldap_bind($conn, $auth_user, $auth_pass)))
  {
    // l'utilisateur ou le mdp est refusé
    echo "Nom d'utilisateur ou mot de passe refusé ! ";
    echo "<a href='index.php'>Retour";
  }
  else
  {
    // l'utilisateur ou le mdp est accepté
    echo "Utilisateur authentifié avec succès !";

    echo "Recherche suivant le filtre (email=*@vernon27.fr) <br />";
    $query = "mail=".$_POST['login']."@vernon27.fr";

    $result = ldap_search($conn, $baseDN, $query);
    echo "Le résultat de la recherche est $result <br />";
    echo "LDAP-Errno: " . ldap_errno($conn) . "<br />\n";
    echo "LDAP-Error: " . ldap_error($conn) . "<br />\n";

    echo "Le nombre d'entrées retournées est ".ldap_count_entries($conn,$result)."<p />";
   
    echo "Lecture de ces entrées ....<p />";
    $info = ldap_get_entries($conn, $result);
    echo "Données pour ".$info["count"]." entrées:<p />";
   
    // Atrributs de l'entrée
    $entry = ldap_first_entry($conn, $result);
    $attrs = ldap_get_attributes($conn, $entry);

    echo $attrs["count"] . " attributs dans cette entrée :<p>";

    //Démarrage de la session
    session_start();
   
    // Informations de l'entrée
    for ($i=0; $i < $info["count"]; $i++)
    {
      //Mise en session des données
      $_SESSION['prenom'] = $info[$i]["givenname"][0];
      $_SESSION['nom'] = $info[$i]["sn"][0];
      $_SESSION['courriel'] = $info[$i]["mail"][0];
     
      $d = 0;
      while ($info[$i]["memberof"][$d])
      {
        echo $info[$i]["memberof"][$d];
        echo '<br>';
        $pieces = explode(',', $info[$i]["memberof"][$d]);
        echo $pieces[0];
        $groupes = $groupes.''.$pieces[0].'.';
        echo '<br>';
        $d++;
      }
    }
    /*
    while ($array[$d])
    {
      $groupes = $array[$d]'.';
      $d++;
    }*/
    echo $groupes;
    echo "Fermeture de la connexion";
    ldap_close($conn);
   
    // Vérification de l'existence de l'utilisateur
    $reqVerif = mysqli_query($link,
    ' SELECT Id_utilisateurs, Num_sections
      FROM utilisateurs
      WHERE Pseudo="'.$_POST['login'].'"
    ')or die("Pb avec la requete: $reqVerif");
    $existUser = mysqli_fetch_array($reqVerif);
   
    if($existUser['Id_utilisateurs'] == '')
    {
      //Création de l'utilisateur pour la première fois
      mysqli_query($link,  "INSERT INTO utilisateurs (Id_utilisateurs, Nom, Prenom, Pseudo, Mot_de_passe, Courriel, Telephone, Groupes, Num_groupes, Num_sections)
            VALUES('', '".$_SESSION['nom']."', '".$_SESSION['prenom']."', '".$_POST['login']."', '', '".$_SESSION['courriel']."', '5557545759', '".$groupes."', '1', '1')");
     
      echo "Insertion en base de données. Veuillez vous reconnecter pour accèder à l'intranet.";
    }
    else
    {
      //Connexion de l'utilisateur déjà présent dans la base avec UPDATE du statut si modification
      echo "OK Auth USER</br>";
     
      mysqli_query($link,  
      " UPDATE utilisateurs
      SET Groupes = '".$groupes."'
      WHERE Nom = '".$_SESSION['nom']."'
      AND Prenom = '".$_SESSION['prenom']."'
      ");
           
      if(strstr($groupes, 'Intra_Intranet'))
      {
        $_SESSION['id_utilisateurs'] = $existUser['Id_utilisateurs'];
        $_SESSION['num_sections'] = $existUser['Num_sections'];
       
        //echo "<a href='accueil.php'>Poursuivre</a>";
        header('Location: accueil.php');
      }
      else
        echo "Vous n'avez pas de droit d'utilisation.";
        echo '<br>';
        echo '<a href="index.php">Retour</a>';
    }
  }
?>

pouvez_vous m'aider cordialement

Hors ligne

#2 17-01-2014 09:07:42

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Probléme de connexion au site intranet

Bonjour,

Vous avez visiblement deux problèmes. L'un visible à travers vos messages d'erreur et l'autre plus profond. Je m'explique.
Pour résoudre d'abord les erreurs générées, il vous suffira d'initialiser vos variables en prenant soin de respecter leur typage. Par exemple pour $groupes un simple $groupes=''; avant la boucle de process suffira.

Ensuite pour votre autre problème, vous avez un gros problème dans votre algorithme de traitement

for ($i=0; $i < $info["count"]; $i++)
        {
            //Mise en session des données
            $_SESSION['prenom'] = $info[$i]["givenname"][0];
            $_SESSION['nom'] = $info[$i]["sn"][0];
            $_SESSION['courriel'] = $info[$i]["mail"][0];
....

En effet à chaque itération de votre boucle vous remplacez le contenu de vos variables session avec l'enregistrement courant, or vous ne vous servez de ces informations qu'après cette boucle dans vos requêtes.. il y a vraiment un souci...

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 17-01-2014 09:19:56

django_78
Membre
Inscription : 16-01-2014
Messages : 5

Re : Probléme de connexion au site intranet

Merci pour ta réponse JC

j'ai pas très bien saisie le problème qui a dans mon algorithme de traitement

pouvez_vous me donner un exemple s'il vous plait

cordialement

Dernière modification par django_78 (17-01-2014 14:42:54)

Hors ligne

#4 17-01-2014 23:07:08

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Probléme de connexion au site intranet

Bonjour,

Je vais faire simple et j'aimerais juste rappeler qu'à la base LDAP est une base de données à part entière et qu'il n'est pas nécessaire d'en tenir une copie partielle en doublon sur MySQL ou n'importe quel SGBDR. LDAP gère aussi les mots de passe utilisateur et la gestion d'un serveur LDAP est transactionné, ce qui reste essentiel il faut le dire. Donc rechercher un utilisateur et les groupes auquel il appartient pour mettre à jour l'information au niveau MySQL avec un mot de passe propre à l'application gérée par MySQL n'est pas pertinent. Pourquoi? car un utilisateur récemment banni de la forêt LDAP de l'entreprise, continuera à avoir accès à votre application ce qui ne devrait pas pouvoir arriver.
Ainsi je vous recommande fortement, d'authentifier directement l'utilisateur soit via LDAP avec son mot de passe associé dans LDAP, soit vous l'authentifiez au niveau de votre application, mais pas un mix des deux, qui reste bancal et non sécuritaire.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums