Verwendung der OpenLDAP-Erweiterung von PHP in ServBay
ServBay ist eine leistungsstarke lokale Web-Entwicklungsumgebung, die zahlreiche Technologiestacks unterstützt. Für PHP-Entwickler, deren Anwendungen mit LDAP-Servern (Lightweight Directory Access Protocol) arbeiten müssen, bietet ServBay die PHP-OpenLDAP-Erweiterung vorinstalliert an – so können Sie diese schnell und unkompliziert aktivieren und verwenden. In diesem Leitfaden erfahren Sie, wie Sie die Erweiterung in Ihrer ServBay-Umgebung einsetzen, etwa für Benutzerauthentifizierung oder Verzeichnissuchen.
Was ist OpenLDAP und die PHP-OpenLDAP-Erweiterung?
OpenLDAP ist eine beliebte Open-Source-Lösung, die Verzeichnisdienste basierend auf dem LDAP-Protokoll bereitstellt. Das LDAP-Protokoll dient der Abfrage und Verwaltung verteilter Verzeichnisdienste, welche in Unternehmensumgebungen häufig für Benutzeridentitätsmanagement, Organisationstrukturen oder Adressbücher genutzt werden.
Die OpenLDAP-Erweiterung für PHP (oft als ldap
-Erweiterung bezeichnet) ist ein PHP-Modul, das Funktionen zur Kommunikation mit LDAP-Servern bereitstellt. Damit können PHP-Anwendungen zu LDAP-Servern verbinden sowie Authentifizierungen, Suchen, Einträge hinzufügen/ändern/löschen und weitere Verzeichnisoperationen ausführen.
In ServBay betrachten wir primär diese OpenLDAP-Client-Erweiterung innerhalb von PHP, die es Ihrem PHP-Code erlaubt, mit externen LDAP-Servern zu interagieren. ServBay selbst beinhaltet keinen OpenLDAP-Server.
Wichtige Funktionen der PHP-OpenLDAP-Erweiterung
Mit der PHP-OpenLDAP-Erweiterung sind unter anderem folgende Operationen möglich:
- Verbindung zu einem LDAP-Server aufbauen: Herstellung einer Verbindung zum gewünschten LDAP-Server.
- Durchführen von Bind-Operationen: Anonyme Bindings oder Authentifizierungen mit DN (Distinguished Name) und Passwort.
- Verzeichnissuche: Abfrage von Verzeichniseinträgen mittels Filter, Suchbasis und Suchbereich.
- Auslesen von Einträgen: Ermittlung der Attribute und Werte von gefundenen Einträgen.
- Verzeichnisänderungen: Neue Einträge anlegen, bestehende löschen, Attribute verändern.
- Fehlerbehandlung: LDAP-Fehlermeldungen bei fehlgeschlagenen Operationen auslesen.
Kompatibilität der PHP-OpenLDAP-Erweiterung in ServBay
Mit ServBay können Sie verschiedene PHP-Versionen installieren und verwenden. Die OpenLDAP-Erweiterung ist in der Regel Bestandteil der offiziellen PHP-Distribution und auch in den von ServBay bereitgestellten PHP-Paketen standardmäßig enthalten. Das heißt: Mit hoher Wahrscheinlichkeit können Sie die OpenLDAP-Erweiterung sofort nutzen, sobald PHP über ServBay installiert ist.
Wie prüfe ich, ob die PHP-OpenLDAP-Erweiterung aktiviert ist?
Obwohl ServBay typischerweise alle gängigen Erweiterungen standardmäßig aktiviert, empfiehlt sich stets eine Überprüfung. Am einfachsten klappt das mit der phpinfo()
-Funktion.
Erstellen Sie eine neue PHP-Datei in Ihrem ServBay-Webverzeichnis (Standard:
/Applications/ServBay/www
), z.B.info.php
.Fügen Sie folgenden Inhalt in die Datei ein:
php<?php phpinfo(); ?>
1
2
3Öffnen Sie die Datei in Ihrem Browser über die zugeordnete Webadresse in ServBay (z.B.
http://servbay.demo/info.php
).Suchen Sie auf der ausgegebenen
phpinfo()
-Seite nach dem Eintragldap
.Falls ein Abschnitt namens
ldap
aufgelistet ist und etwaLDAP Support enabled
angezeigt wird, ist die PHP-OpenLDAP-Erweiterung erfolgreich geladen und aktiviert.
Falls kein ldap
-Abschnitt sichtbar ist oder LDAP Support
als deaktiviert angezeigt wird, prüfen Sie die PHP-Konfiguration Ihrer ServBay-Installation oder kontaktieren Sie den ServBay-Support. Standardmäßig ist die Erweiterung jedoch aktiviert.
Verwendung von OpenLDAP in PHP-Code
Nachdem Sie bestätigt haben, dass die OpenLDAP-Erweiterung aktiv ist, können Sie in Ihrer PHP-Anwendung die Funktionen der Familie ldap_*
zur Kommunikation mit einem LDAP-Server nutzen. Im Folgenden finden Sie ein Basisbeispiel, das zeigt, wie Sie eine Verbindung herstellen, einen Admin-Bind durchführen, einen Benutzer suchen und versuchen, diesen zu authentifizieren.
Wichtiger Hinweis: Die Werte für LDAP-Server-Adresse, Port, Admin-DN, Passwort, Suchbasis, Filter, Benutzerpasswort etc. sind Platzhalter. Ersetzen Sie sie in der Praxis durch Ihre echten Systemeinstellungen und Zugänge. Hinterlegen Sie niemals sensible Daten wie Passwörter im Klartext im Code einer Produktivumgebung.
Beispielcode: Verbindung, Suche und Authentifizierung
Speichern Sie den folgenden Code als PHP-Datei (z.B. ldap_test.php
) im Webverzeichnis Ihrer ServBay-Site und rufen Sie die Datei im Browser auf.
<?php
// --- LDAP-Verbindungskonfiguration ---
// Ersetzen Sie dies durch die Adresse Ihres LDAP-Servers. Für LDAPS (SSL/TLS) verwenden Sie ldaps://, Standardport ist 636.
$ldapURI = "ldap://ldap.example.com:389";
// Ersetzen Sie dies mit Ihrem LDAP-Admin-DN oder einem Account mit Suchrechten
$ldapAdminRdn = "cn=admin,dc=example,dc=com";
// Ersetzen Sie dies durch das Passwort für obigen Admin-DN
$ldapAdminPassword = "admin_password";
// --- Benutzersuche und Authentifizierung ---
// Ersetzen Sie dies mit der Suchbasis Ihres Verzeichnisses
$searchBase = "dc=example,dc=com";
// Ersetzen Sie dies durch einen Filter, der den Zielbenutzer selektiert. Z.B. Suche nach uid 'servbay-demo'.
$searchFilter = "(uid=servbay-demo)";
// Ersetzen Sie dies durch das Passwort des zu authentifizierenden Benutzers
$userPasswordToAuthenticate = "user_password_for_servbay_demo";
echo "<h2>PHP OpenLDAP Beispiel in ServBay</h2>";
// 1. Verbindung zum LDAP-Server herstellen
echo "<p>Versuche Verbindung zu LDAP-Server: {$ldapURI}...</p>";
$ldapConn = ldap_connect($ldapURI);
if (!$ldapConn) {
die("<p style='color: red;'>Fehler: Konnte keine Verbindung zum LDAP-Server herstellen.</p>");
}
echo "<p style='color: green;'>Verbindung zum LDAP-Server erfolgreich.</p>";
// LDAP-Optionen setzen (vor allem Protokollversion und keine Referrals)
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);
// 2. Mit Admin-DN am LDAP-Server authentifizieren (für Berechtigungen wie Suche)
echo "<p>Versuche Bind mit Admin-DN '{$ldapAdminRdn}'...</p>";
if (!ldap_bind($ldapConn, $ldapAdminRdn, $ldapAdminPassword)) {
echo "<p style='color: red;'>Fehler: Admin-Bind fehlgeschlagen.</p>";
echo "<p style='color: red;'>LDAP-Fehler: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Verbindung schließen
die();
}
echo "<p style='color: green;'>Admin-Bind erfolgreich.</p>";
// 3. Benutzer suchen
echo "<p>Versuche Suche im Basis-DN '{$searchBase}' mit Filter '{$searchFilter}'...</p>";
$searchResult = ldap_search($ldapConn, $searchBase, $searchFilter);
if (!$searchResult) {
echo "<p style='color: red;'>Fehler: LDAP-Suche fehlgeschlagen.</p>";
echo "<p style='color: red;'>LDAP-Fehler: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Verbindung schließen
die();
}
echo "<p style='color: green;'>Suche erfolgreich.</p>";
// 4. Suchergebnisse abrufen
$entries = ldap_get_entries($ldapConn, $searchResult);
if ($entries["count"] > 0) {
echo "<p>{$entries["count"]} passender Eintrag gefunden.</p>";
// Wir betrachten nur den ersten Treffer
$userDn = $entries[0]["dn"];
echo "<p>DN des ersten Benutzers: <strong>{$userDn}</strong></p>";
// 5. Benutzerauthentifizierung via Bind mit Benutzer-DN und Passwort versuchen
echo "<p>Versuche Authentifizierung mit Benutzer-DN '{$userDn}'...</p>";
// Hier erfolgt der User-Bind (nicht als Admin)
if (@ldap_bind($ldapConn, $userDn, $userPasswordToAuthenticate)) {
echo "<p style='color: green;'>Benutzerauthentifizierung erfolgreich!</p>";
} else {
echo "<p style='color: red;'>Benutzerauthentifizierung fehlgeschlagen.</p>";
echo "<p style='color: red;'>LDAP-Fehler: " . ldap_error($ldapConn) . "</p>";
}
} else {
echo "<p>Kein Benutzer gefunden, der dem Filter '{$searchFilter}' entspricht.</p>";
}
// 6. LDAP-Verbindung beenden
echo "<p>LDAP-Verbindung wird geschlossen...</p>";
ldap_unbind($ldapConn);
echo "<p style='color: green;'>Verbindung geschlossen.</p>";
?>
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Erläuterungen zum Code
- Verbindung (
ldap_connect
): Baut die Verbindung zum LDAP-Server auf. Gibt ein Verbindungshandle zurück. - Optionen setzen (
ldap_set_option
): Legt das Verhalten der Verbindung fest.LDAP_OPT_PROTOCOL_VERSION, 3
aktiviert die Nutzung von LDAPv3 (empfohlen).LDAP_OPT_REFERRALS, 0
deaktiviert Referrals (in einfachen Anwendungen meist nicht nötig). - Bind-Operation (
ldap_bind
): Authentifiziert sich beim LDAP-Server.- Anonymer Bind:
ldap_bind($ldapConn)
– ohne DN und Passwort, meist mit eingeschränkten Berechtigungen. - Authentifizierter Bind:
ldap_bind($ldapConn, $dn, $password)
– mit explizitem DN und Passwort. Im Beispiel zunächst als Admin, dann als Benutzer.
- Anonymer Bind:
- Suche (
ldap_search
): Sucht unterhalb der angegebenen Suchbasis (searchBase
) nach Einträgen gemäß Filter (searchFilter
). - Einträge abrufen (
ldap_get_entries
): Extrahiert alle Treffer aus dem Suchergebnis als Array. - Verbindung beenden (
ldap_unbind
): Trennt die Verbindung zum LDAP-Server und gibt Ressourcen frei.
Hinweise & Best Practices
- LDAP-Server erforderlich: Dieser Leitfaden und das Beispiel beziehen sich rein auf die Client-Anbindung von OpenLDAP in PHP. Sie benötigen einen funktionsfähigen LDAP-Server (lokal installiert – unabhängig von ServBay) oder einen entfernten Unternehmens-LDAP-/Active-Directory-Server.
- Sicherheit: Setzen Sie in produktiven Umgebungen stets Sicherheits-Best-Practices um – etwa Geheimnisse in Umgebungsvariablen/Sicherheitsdateien speichern und die Kommunikation via LDAPS (SSL/TLS, Port 636) verschlüsseln, nicht unverschlüsselt via Port 389.
- Fehlerbehandlung: Das Beispiel nutzt eine sehr einfache Fehlerausgabe. In echten Applikationen sollten Fehler robust abgefangen und protokolliert werden.
- DN-Format: Das Format des DN (Distinguished Name) ist kritisch und muss exakt zu Ihrer LDAP-Server-Konfiguration passen.
Häufig gestellte Fragen (FAQ)
F: Ich finde in phpinfo()
keinen Abschnitt ldap
oder er ist deaktiviert – was tun?
A: In ServBay ist die PHP-OpenLDAP-Erweiterung normalerweise automatisch aktiviert. Achten Sie darauf, phpinfo()
für die richtige PHP-Version aufzurufen. Ist der Abschnitt weiter nicht sichtbar, könnte es an einer speziellen ServBay-Version oder Fehlern in Ihrer Installation liegen. Probieren Sie eine Neuinstallation des betroffenen PHP-Pakets oder kontaktieren Sie den ServBay-Support.
F: Meine PHP-Anwendung meldet „Call to undefined function ldap_connect()“.
A: Das deutet darauf hin, dass die OpenLDAP-Erweiterung nicht geladen wurde. Überprüfen Sie mittels phpinfo()
wie oben beschrieben den Status der Erweiterung.
F: Die Erweiterung ist geladen, aber Bind oder Verbindungsaufbau liefern LDAP-Fehler.
A: Kontrollieren Sie Serveradresse, Port und Anmeldedaten (DN, Passwort) sorgfältig. Die Meldungen von ldap_error()
liefern meist genaue Hinweise, etwa „Invalid credentials“ (ungültige Zugangsdaten) oder „Can't contact LDAP server“ (Verbindung fehlgeschlagen). Stellen Sie sicher, dass Ihr LDAP-Server erreichbar und aktiv ist.
Fazit
ServBay macht die Nutzung der PHP-OpenLDAP-Erweiterung schnell und unkompliziert zugänglich. Mit wenigen Prüfungen können Sie sicherstellen, dass Ihr PHP-Umfeld für die Kommunikation mit LDAP-Servern bereit ist. Durch die leistungsfähigen LDAP-Funktionen in PHP lassen sich einfach Benutzerauthentifizierung, Verzeichnissuchen oder Organisationsdaten in lokale Webanwendungen integrieren – und Ihre ServBay-Projekte werden um zahlreiche neue Möglichkeiten erweitert.