Question

Je cherche un moyen d'authentifier les utilisateurs via LDAP avec PHP (Active Directory étant le fournisseur). Idéalement, il devrait pouvoir fonctionner sous IIS 7 ( adLDAP le fait sous Apache). Quelqu'un a-t-il fait quelque chose de similaire avec succès?

  • Edit: Je préférerais une bibliothèque / classe avec du code prêt à partir ... Il serait idiot d’inventer la roue lorsque quelqu'un l'a déjà fait.
Était-ce utile?

La solution

L'importation d'une bibliothèque entière semble inefficace lorsque vous avez simplement besoin de deux lignes de code ...

$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, 

L'importation d'une bibliothèque entière semble inefficace lorsque vous avez simplement besoin de deux lignes de code ...

<*>POST['username'],

L'importation d'une bibliothèque entière semble inefficace lorsque vous avez simplement besoin de deux lignes de code ...

<*>POST['password'])) { // log them in! } else { // error message }

Autres conseils

On pourrait penser que la simple authentification d'un utilisateur dans Active Directory serait un processus assez simple utilisant LDAP en PHP sans avoir besoin d'une bibliothèque. Mais beaucoup de choses peuvent le compliquer assez rapidement:

  • Vous devez valider la saisie. Un nom d'utilisateur / mot de passe vide passerait sinon.
  • Vous devez vous assurer que le nom d'utilisateur / mot de passe est correctement codé lors de la liaison.
  • Vous devriez chiffrer la connexion à l'aide de TLS.
  • Utilisation de serveurs LDAP distincts pour la redondance au cas où l'un d'entre eux serait en panne.
  • Obtention d'un message d'erreur informatif en cas d'échec de l'authentification.

Il est en fait plus simple d’utiliser une bibliothèque LDAP prenant en charge ce qui précède. J'ai finalement fini par lancer ma propre bibliothèque qui gère tous les points ci-dessus: LdapTools (non seulement pour l'authentification , ça peut faire beaucoup plus). Il peut être utilisé comme suit:

use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;

$domain = (new DomainConfiguration('example.com'))
    ->setUsername('username') # A separate AD service account used by your app
    ->setPassword('password')
    ->setServers(['dc1', 'dc2', 'dc3'])
    ->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);

if (!$ldap->authenticate($username, $password, $message)) {
    echo "Error: $message";
} else {
    // Do something...
}

L’appel d’authentification ci-dessus:

  • Vérifiez que ni le nom d'utilisateur ni le mot de passe ne sont vides.
  • Assurez-vous que le nom d'utilisateur / mot de passe est correctement codé (UTF-8 par défaut)
  • Essayez un autre serveur LDAP au cas où l'un d'entre eux serait en panne.
  • Cryptez la demande d'authentification à l'aide de TLS.
  • Fournissez des informations supplémentaires en cas d'échec (compte verrouillé / désactivé, etc.)

Il existe d'autres bibliothèques pour le faire aussi (comme Adldap2). Cependant, je me suis senti contraint de fournir des informations supplémentaires car la réponse la plus votée est en réalité un risque de sécurité sur lequel on ne peut s'appuyer sans validation des entrées ni utilisation de TLS.

Je le fais simplement en transmettant les informations d'identification de l'utilisateur à ldap_bind ().

http://php.net/manual/fr/function.ldap- bind.php

Si le compte peut se lier à LDAP, il est valide. si ça ne peut pas, ça ne l'est pas. Si vous ne faites que de l’authentification (pas de gestion de compte), je ne vois pas le besoin d’une bibliothèque.

J'aime le Zend_Ldap . , vous ne pouvez utiliser que cette classe dans votre projet, sans le Zend Framework.

PHP possède des bibliothèques: http://ca.php.net/ldap

PEAR propose également un certain nombre de packages: http: // pear.php.net/search.php?q=ldap&in=packages&x=0&y=0

Je n'ai pas utilisé non plus, mais j'y allais à un moment donné et ils semblaient devoir travailler.

Pour ceux qui recherchent un exemple complet, consultez http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ .

J'ai testé cette connexion aux contrôleurs de domaine Windows Server 2003 et Windows Server 2008 R2 à partir d'un serveur Web Windows Server 2003 (IIS6) et d'une entreprise Windows Server 2012 exécutant IIS 8.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top