Benutzerauthentifizierung mit PHP an einem LDAP Server

Vor längerer Zeit habe ich hier schonmal geschrieben, dass ich an einer PHP Applikation im Geschäft Arbeite. Lieder bin ich da in der letzten Zeit kaum dazugekommen, aber jetzt sieht es doch wieder etwas besser aus.

Diese Applikation hat auch einen geschützten Bereich, wo man sich anmelden muss. Nun wäre es möglich die Benutzerdaten in einer Datenbank zu speichern. Das hätte aber den Nachteil, dass die Benutzer an mehreren Orten verwalten müsste. Nämlich in der mySQL Datenbank und in der Active Directory von unserem Windows 2003 PDC. In der AD müssen die Benutzer ja zwangsläufig gespeichert werden, warum also nicht diese Benutzer zur Authentifizierung in der PHP Applikation verwenden.

Mit LDAP funktioniert das recht einfach, denn wenn man sich mit einem Benutzer über LDAP am PDC anmelden kann, hat man einen gültigen Account. So sieht es in der Theorie aus.

Die Praxis ist da recht ähnlich. Zuerst muss man die LDAP Befehle installieren. Unter Ubuntu funktioniert das so:
sudo apt-get install php5-ldap

Ich habe dann ein kleines Script gebastelt, welches eine Verbindung zum Server herstellt und sich dann versucht einzuloggen. Das sieht so aus:
<?
$conn
=ldap_connect("server")or die("could not connect to the server");

if(@
ldap_bind($conn,"domain\username","password"))
{
    echo 
"login ok";
}
else
{
    echo 
"login falsch";
}

ldap_close($conn);
?>


Wichtig ist, dass man den Benutzernamen im Format domain\username angibt.

Mit Outlook auf Adressen in der Active Directory zugreifen

Mit Outlook hat man die Möglichkeit auf die Adressdaten einer Active Directory zuzugreifen. Da das ganze über LDAP läuft, ist das relativ simpel. Von Vorteil ist dies, wenn man Adressdaten zentral speichern will aber keinen Exchange Server hat.

Ich erkläre hier wie man mit einem Outlook 2002 auf die Active Directory von einem Windows 2003 Server zugreift. Ich denke, bei anderen Version sieht es ähnlich aus.

Dazu muss man ein neues Adressbuch erstellen. Dies macht man über Extras -> E-Mail-Konten. Nun wählt man "Ein neues Verzeichnis oder Adressbuch hinzufügen" an und klickt auf weiter. Beim nächsten schritt wählt man den "Internetverzeichnisdienst (LDAP)" an und klickt wieder auf weiter.
Jetzt hat man die Möglichkeit den Servernamen anzugeben. Zudem muss man die Anmeldeinformationen angeben. Idealerweise im Format domain\user.
http://images.t-error.ch/blog/516/outlook_ldap_server.jpg


Nun muss man noch weitere Einstellungen angeben. Unter Verbindung kann man den Anzeigenamen und den Port angeben. Mit dem Port 389 klappt es bei mir ohne Probleme.
http://images.t-error.ch/blog/516/outlook_ldap_name_port.jpg


Unter Suche gibt man nun an, wo die Adressdaten abgelegt sind. Je nachdem wie man die AD organisiert hat, sieht das halt etwas anders aus. Auf jeden Fall, muss man die Suchbasis im LDAP Stil angeben.
http://images.t-error.ch/blog/516/outlook_ldap_search.jpg


Wenn man das gemacht hat, kann man das Adressbuch öffnen und rechts oben bei "Namen anzeigen aus" das richtige Adressbuch auswählen. Dann sollten alle Adressen angezeigt werden.

Leider funktioniert das nicht Bidirektional. Das heisst, man kann keine Kontakte im Outlook erfassen, auch wenn die Berechtigungen stimmen. Zudem gibt es keine Möglichkeit die Adressen in Ordner zu fassen. Auch wenn man in der AD Organisationseinheiten (OUs) erstellt, werden die Adressen im Outlook in einer Liste dargestellt. Aber vielleicht, gibt es doch eine andere Lösung.