2015-10-29 1 views
0

J'ai mis en place une application web de base, l'application web elle-même fonctionne très bien. Cependant, je voulais ajouter l'authentification de l'utilisateur en utilisant notre serveur LDAP existant. Le script ldap semble fonctionner par intermittence, cependant, lorsque la connexion aux premières tentatives échouera avec le message 'accès refusé', il s'authentifiera. J'ai couru le script stand alone sans l'application et le même comportement s'applique.ldap auth avec php échoue par intermittence

Je ne peux pas sembler attacher le problème n'importe où, je peux seulement supposer qu'il se produit sur le côté ldap et pas le côté php. J'ai inclus le script ci-dessous, toute aide serait géniale.

Tout en écrivant cela, il n'a pas réussi à auth 3 fois et passé deux fois ...

<?php 

$user = $_POST['login-name']; 
$password = $_POST['login-pass']; 

$ldap_user = 'uid='.$user.',ou=people,dc=ourdomain,dc=com,dc=au'; 
$ldap_pwd = $password; 

$ldaphost = 'ldap://ldapserver.domain.com'; 
$ldapport = 389; 

$ds = ldap_connect($ldaphost, $ldapport) 
or die("Could not connect to $ldaphost"); 
if ($ds) 
{ 
    $username = $ldap_user; 
    $upasswd = $password; 

    $ldapbind = ldap_bind($ds, $username, $upasswd); 


    if ($ldapbind) 
     { 
      //print "Congratulations! $username is authenticated."; 
      header('Location: message.html'); 
     } 
    else 
     {print "Access Denied!";} 


} 
?> 
+0

Avez-vous un « Accès refusé » ou « Impossible de se connecter à $ ldaphost » quand il échoue? Utilisez-vous toujours le même utilisateur avec les mêmes informations d'identification? Pouvez-vous ajouter un appel à '' 'ldap_error()' '' dans le bloc '' 'else'''? – heiglandreas

+0

'' 'ldap_connect''' ne se connecte pas ** mais se contente de vérifier si l'URI ou le FQDN ou l'adresse IP fournis ont du sens! Vous ne devriez pas ** ** compter sur son résultat pour vérifier si le serveur est réellement accessible! – heiglandreas

+0

@heiglandreas - Je reçois l'accès refusé, je n'ai jamais eu «Impossible de se connecter». J'ai essayé avec diverses qualifications d'utilisateur et les mêmes résultats se produisent toujours. Je peux certainement ajouter ldap_error() au bloc else. Est-ce leur meilleure alternative à l'utilisation de ldap_connect? –

Répondre

0

Vous devriez probablement définir la version protocole LDAP à 3 en utilisant

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 

avant d'appeler ldap_bind().

J'ai trouvé cela à http://php.net/manual/de/function.ldap-bind.php#72795

+0

Yep place sur! J'ai fait un google rapide de ldap_error() et vu particulièrement avec OpenLDAP vous devez spécifier la version. Son fonctionnement comme prévu maintenant, merci beaucoup pour votre aide! –