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

PHP & Base de données Discussion :

Active Directory et php [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut Active Directory et php
    Bonjour,

    Je dois pour mon stage créer un site intranet, les utilisateurs devront se connecter avec leur login et mdp (le même qu'AD). Je ne comprends pas grand chose concernant active directory, ldap et php comment tous cela fonctionne...

    Par quoi commencer ? les ressources du net ne m'aide absolument pas !

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Commence par la doc de PHP LDAP. Si tu ne connais pas LDAP, regarde sur Wikipedia

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Salut !

    Je me suis inspiré de ce bout de code puis je l'ai adapté à mon cas :

    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
    50
    51
    52
    53
    54
    55
    56
     
     
    <?php
    // informations de connexions
     
    $ldap_host = "172.**.**.**";  // l'adresse du serveur LDAP
    $base_dn = "DC=****,DC=***"; // nom du domaine
     
    $user = "cn=".$_POST['user'];  //  on traite les information recoltées 
    $password = $_POST['pass']; 
     
    $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";
     
    $connect = ldap_connect($ldap_host)  // connexion en anonymous
        or exit(">>Connexion au serveur LDAP echoué<<");
     
     
    ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);  // on passe le LDAP en version 3, necessaire pour travailler avec le AD
    ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
     
     
    $read = ldap_search($connect,$base_dn,$user)
         or exit(">>erreur lors de la recherche<<");
    $info = ldap_get_entries($connect, $read);
     
    if ( preg_match("!".$admin."!",$info[0]["dn"] ) ) // si le user trouvé est admin :
    	{
    	$bind = ldap_bind($connect,$info[0]["dn"],$password);
    	if ( $bind == FALSE )	// si le BIND est FALSE, le mot de passe est erronée
    		// echo( " il est admin mais faux mdp");
    		header("location: index.php");
    	elseif ( $bind == TRUE )   // on peut ajouter d'autre traitement si l'identification est ok ( ex : $_SESSION['user'] = ... )
    		{
    			header("location: index.php");
    		}
    	} 
    elseif ( preg_match("!".$membres."!",$info[0]["dn"]) ) // si le user trouvé est membres :
    	{
        $bind = ldap_bind($connect,$info[0]["dn"],$password);
    	if ( $bind == FALSE )  // si le BIND est FALSE, le mot de passe est erronée
    		// echo( " il est membre mais faux mdp");
    		header("location: index.php");
     
    	elseif ( $bind == TRUE )  // on peut ajouter d'autre traitement si l'identification est ok ( ex : $_SESSION['user'] = ... )
    		{
    			header("location: index.php");
    		}
    	}
    else // le user n'a pas pu être trouvé
    {
    // echo  "nom de user invalide";
    header("location: index.php");
    }
    ldap_close($connect);
    ?>
    Mon formulaire pour récupérer l'user et le pass est sur index.php, j'ai bien fais un include de ma page où il y a le code ci-dessus permettant la connexion à ldap. Le problème c'est que rien ne s'affiche à par l'image du site, même le formulaire ne s'affiche plus. Je suis le seul à connaître un peu php donc un peu de mal !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    La cible du formulaire est la page que l'on veut afficher une fois l'authentification vérifiée où la page connexion ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    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
     
     
    <?php
    $user = htmlentities($_POST["user"]); // on affecte à $user la valeur du champ user du formulaire
    $pass = htmlentities($_POST["pass"]); // on affecte à $pass la valeur du champ pass du formulaire
     
    $ds = ldap_connect("***.**.**.**");  // connexion au serveur ldap
     
    // connexion avec user, domaine et pass puis vérification des champs bien remplis                                                                                                       
    if($r = ldap_bind($ds,"$user@domaine.com.","$pass") AND !empty($_POST['user']) AND !empty($_POST['pass'])){  
        echo '<script type="text/javascript">alert("Accès autorisé ! Merci de vous être identifié.");</script>'; // accès autorisé
        echo '<script type="text/javascript">window.location=
             "****.php";</script>'; // redirection page correspondante
        exit;
    }else{
        echo '<script type="text/javascript">alert("Accès refusé ! Vérifiez votre login et votre mot de passe SVP. Si le problème persiste, contactez l\'administrateur.");</script>'; // sinon accès refusé
        echo '<script type="text/javascript">window.location=
             "****.php";</script>'; //redirection index
        exit;
    }
     
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // option à ajoutée si vous utiliser Windows server2k3
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); // option à ajoutée si vous utiliser Windows server2k3
    ?>
    si ça intéresse certain

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Attention:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $r = ldap_bind($ds,"$user@domaine.com.","$pass") AND !empty($_POST['user']) AND !empty($_POST['pass'])
    Cette expression n'est pas évaluée comme tu le voudrais, en réalité dans $r se trouve le résultat de l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ldap_bind($ds,"$user@domaine.com.","$pass") AND !empty($_POST['user']) AND !empty($_POST['pass'])
    et non pas le résultat de ldap_bind.

    Ceci est dû au fait que l'opérateur = à la priorité sur l'opérateur AND (ou &&).

    En résumé:
    n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ($a = $b) && !empty($c)
    Pour en savoir plus sur la priorité des opérateurs, merci de consulter la doc

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Donc si j'ai bien compris vous me conseillez de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    if(($r = ldap_bind($connect,"$user@****.***","$pass")) AND !empty($_POST['user']) AND !empty($_POST['pass'])){

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Tout à fait.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Vous pouvez peut-être m'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    if (($afficheDateAppel->rowCount() == 0) AND empty($_POST['fonctionDateAppel'])) {
                                echo '<script type="text/javascript">alert("Aucun résultat ou date invalide :
    j'ai fais ce code, le problème : quand l'utilisateur ne renseigne rien dans le champ du formulaire, le script alert ne s'affiche pas.

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    En général je déconseille fortement de produire du code JavaScript avec PHP, c'est une mauvaise façon de faire car le découpage logique de l'application s'en ressent (JavaScript DOM se cantonne aux comportements coté clients - et uniquement sur un navigateur) et surtout ce n'est pas sémantiquement correct.

    Mais pour répondre à ta question, tu devrais vérifier s'il n'y a bien aucun résultat renvoyé car sinon l'alerte ne sera pas émise.
    Une autre façon de régler le problème est d'utiliser une expression conditionnelle OR et non AND:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($_POST['fonctionDateAppel']) || $afficheDateAppel->rowCount() == 0)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LDAP] Mots de passe active directory via php
    Par chtijule dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/08/2009, 10h54
  2. [Active Directory] Création de comptes utilisateurs depuis un script (PHP)
    Par Hervé Saladin dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 24/07/2007, 11h26
  3. comment acceder a une base active directory par php???
    Par vincenttt dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 08/06/2007, 15h31
  4. PHP + Active Directory
    Par pogy29 dans le forum Langage
    Réponses: 7
    Dernier message: 04/08/2006, 10h25
  5. [LDAP] problème connexion anonyme avec php à Active Directory
    Par anto48_4 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 02/03/2006, 16h50

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