Ich suche nach einer Möglichkeit, Benutzer über LDAP mit PHP (mit Active Directory als Anbieter) zu authentifizieren. Idealerweise sollte es auf IIS) ausgeführt werden können = 7 ( adLDAP funktioniert es auf Apache). Hat jemand etwas ähnliches getan, mit Erfolg?
Das Importieren einer ganzen Bibliothek scheint ineffizient zu sein, wenn Sie lediglich zwei Codezeilen benötigen ...
$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) {
// log them in!
} else {
// error message
}
Sie würden denken, dass die einfache Authentifizierung eines Benutzers in Active Directory mit LDAP in PHP ohne die Notwendigkeit einer Bibliothek ziemlich einfach wäre. Es gibt jedoch eine Menge Dinge, die es ziemlich schnell komplizieren können :
In den meisten Fällen ist es sogar einfacher, eine LDAP-Bibliothek zu verwenden, die die oben genannten Funktionen unterstützt. Letztendlich habe ich meine eigene Bibliothek gerollt, die alle oben genannten Punkte behandelt: LdapTools (Nun, nicht nur zur Authentifizierung, sie kann viel mehr). Es kann wie folgt verwendet werden:
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...
}
Der obige Authentifizierungsanruf wird:
Es gibt auch andere Bibliotheken, um dies zu tun (wie Adldap2). Ich fühlte mich jedoch gezwungen, einige zusätzliche Informationen bereitzustellen, da die am häufigsten gewählte Antwort tatsächlich ein Sicherheitsrisiko darstellt, auf das ich mich verlassen kann, wenn keine Eingabevalidierung erfolgt und kein TLS verwendet wird.
Dazu übergebe ich einfach die Benutzeranmeldeinformationen an ldap_bind ().
http://php.net/manual/en/function.ldap-bind.php
Wenn das Konto an LDAP gebunden werden kann, ist es gültig. Wenn es nicht geht, geht es nicht. Wenn Sie nur die Authentifizierung (nicht die Kontoverwaltung) durchführen, sehe ich keine Notwendigkeit für eine Bibliothek.
Ich mag die Zend_Ldap Klasse, Sie können nur diese Klasse in Ihrem Projekt verwenden, ohne das Zend Framework.
PHP hat Bibliotheken: http://ca.php.net/ldap
PEAR hat auch eine Reihe von Paketen: http://pear.php.net/search.php?q=ldapin=packagesx=0y=
Ich habe es auch nicht benutzt, aber ich wollte es irgendwann und sie schienen so, als sollten sie funktionieren.
Wenn Sie ein vollständiges Beispiel suchen, lesen Sie http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ .
Ich habe diese Verbindung mit Windows Server 2003- und Windows Server 2008 R2-Domänencontrollern von einem Windows Server 2003-Webserver (IIS6) und von einem Windows Server 2012-Unternehmen aus getestet, auf dem IIS 8 ausgeführt wird.