PHP's OpenLDAP-extensie gebruiken in ServBay
ServBay is een krachtig lokaal webontwikkelplatform dat meerdere technologieën ondersteunt. Voor PHP-ontwikkelaars die hun applicaties willen laten communiceren met een LDAP-server (Lightweight Directory Access Protocol), bevat ServBay standaard de OpenLDAP-extensie voor PHP. Deze kan eenvoudig worden geactiveerd en gebruikt. In dit artikel lopen we stap voor stap door hoe je deze extensie inzet binnen ServBay, zodat je gebruikersauthenticatie, directory-opvragingen en meer mogelijk maakt.
Wat is OpenLDAP en wat doet de OpenLDAP-extensie van PHP?
OpenLDAP is een populaire open source-implementatie van directoryservices op basis van het LDAP-protocol. LDAP is een applicatieprotocol om toegang te krijgen tot, en beheer uit te voeren op, gedistribueerde directory-informatie, veelgebruikt in zakelijke omgevingen voor gebruikersauthenticatie, organisatiebeheer en adresboekdiensten.
De OpenLDAP-extensie van PHP (vaak simpelweg de ldap
-extensie genoemd) is een module voor de programmeertaal PHP, waarmee je vanuit PHP direct met een LDAP-server kunt communiceren. Via deze extensie kunnen PHP-applicaties een verbinding maken met een LDAP-server, authenticatie uitvoeren (binden), zoeken, toevoegen, wijzigen en verwijderen van directory-items, en meer.
In ServBay draait het vooral om de OpenLDAP-clientextensie geïntegreerd binnen PHP; hiermee kan je PHP-code verbinding maken met externe LDAP-servers en die beheren. ServBay zelf bevat geen LDAP-server.
Belangrijkste functionaliteit van de PHP OpenLDAP-extensie
Met de PHP OpenLDAP-extensie kun je o.a.:
- Verbinden met een LDAP-server: Maak een verbinding met een opgegeven LDAP-server.
- Bind-operaties uitvoeren: Maak een anonieme verbinding of authenticeer met een DN (Distinguished Name) en wachtwoord.
- Directory zoeken: Zoek naar directory-items op basis van filters, bazeer je zoekgebied en bereik.
- Iteminformatie ophalen: Haal attributen en waarden op van gevonden directory-items.
- Items bewerken: Voeg items toe, verwijder bestaande of wijzig attributen.
- LDAP-fouten verwerken: Verkrijg foutinformatie wanneer bewerkingen mislukken.
Versiecompatibiliteit van de PHP OpenLDAP-extensie in ServBay
ServBay ondersteunt het installeren en gebruiken van meerdere PHP-versies naast elkaar. De OpenLDAP-extensie wordt meestal standaard meegeleverd met de officiële PHP-distributie en is ook standaard opgenomen in de PHP-pakketten van ServBay. Dit betekent dat wanneer je een PHP-versie vanuit ServBay gebruikt, de OpenLDAP-extensie doorgaans al beschikbaar is.
Hoe controleer je of de PHP OpenLDAP-extensie is ingeschakeld
Hoewel ServBay zo is ontworpen dat de meest gebruikte extensies direct beschikbaar zijn, is het een goede gewoonte om de status te verifiëren. De makkelijkste methode is via de functie phpinfo()
.
Maak een nieuw PHP-bestand aan, bijvoorbeeld
info.php
, in de rootdirectory van je ServBay-website (standaard/Applications/ServBay/www
).Voeg in
info.php
de volgende inhoud toe:php<?php phpinfo(); ?>
1
2
3Bezoek via je browser de URL van deze site in ServBay (bijvoorbeeld
http://servbay.demo/info.php
).Zoek op de
phpinfo()
-pagina naar een sectie met de naamldap
.Zie je de sectie
ldap
en staat er configuratie-informatie alsLDAP Support enabled
, dan is de OpenLDAP-extensie voor PHP succesvol geladen en ingeschakeld.
Wordt de sectie ldap
niet getoond, of is LDAP Support
uitgeschakeld, controleer dan de buildconfiguratie van die PHP-versie in ServBay of neem contact op met de ServBay-ondersteuning. In de meeste gevallen staat deze standaard aan.
OpenLDAP gebruiken in je PHP-code
Zodra je hebt bevestigd dat de OpenLDAP-extensie actief is, kun je in je PHP-applicatie gebruikmaken van de reeks ldap_*
-functies om met de LDAP-server te communiceren. Hieronder een basaal voorbeeld dat laat zien hoe je verbindt met een LDAP-server, een beheerder-bind uitvoert, een gebruiker zoekt en een authenticatiepoging doet voor die gebruiker.
Belangrijk: De LDAP-serveradressen, poorten, beheerders-DN, wachtwoorden, zoekbasissen, gebruikersfilters en -wachtwoorden in het onderstaande voorbeeld zijn placeholders. Vervang deze altijd door jouw daadwerkelijke LDAP-servergegevens. Zet nooit gevoelige gegevens (zoals wachtwoorden) als platte tekst in productiecode!
Voorbeeldcode: Basisverbinding, zoeken en authenticeren
Sla het volgende script op als bijvoorbeeld ldap_test.php
in de ServBay-webdirectory en voer het uit via je browser.
php
<?php
// --- LDAP verbinding configuratie ---
// Vervang door het adres van jouw LDAP-server. Gebruik ldaps:// voor SSL/TLS (standaard poort 636).
$ldapURI = "ldap://ldap.example.com:389";
// Vervang door de DN (Distinguished Name) van een gebruiker met zoekrechten of adminrechten
$ldapAdminRdn = "cn=admin,dc=example,dc=com";
// Vervang door het wachtwoord van bovengenoemde gebruiker
$ldapAdminPassword = "admin_password";
// --- Gebruikerszoeken en authenticatie configuratie ---
// Vervang door de zoekbasis binnen jouw LDAP-directory
$searchBase = "dc=example,dc=com";
// Vervang door een filter om een specifieke gebruiker te zoeken (bijv. uid = 'servbay-demo')
$searchFilter = "(uid=servbay-demo)";
// Vervang door het wachtwoord van de te authenticeren gebruiker
$userPasswordToAuthenticate = "user_password_for_servbay_demo";
echo "<h2>Voorbeeld: PHP OpenLDAP in ServBay</h2>";
// 1. Verbind met de LDAP-server
echo "<p>Poging om verbinding te maken met LDAP-server: {$ldapURI}...</p>";
$ldapConn = ldap_connect($ldapURI);
if (!$ldapConn) {
die("<p style='color: red;'>Fout: Kan geen verbinding maken met de LDAP-server.</p>");
}
echo "<p style='color: green;'>Verbinding met LDAP-server geslaagd.</p>";
// Stel LDAP-opties in (meestal protocolversie en referrals niet volgen)
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);
// 2. Bind met adminaccount voor zoekacties en bewerkingen
echo "<p>Poging om te binden met admin DN '{$ldapAdminRdn}'...</p>";
if (!ldap_bind($ldapConn, $ldapAdminRdn, $ldapAdminPassword)) {
echo "<p style='color: red;'>Fout: Adminbind mislukt.</p>";
echo "<p style='color: red;'>LDAP-fout: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Verbreek verbinding
die();
}
echo "<p style='color: green;'>Adminbind geslaagd.</p>";
// 3. Gebruiker zoeken
echo "<p>Poging om gebruiker te zoeken met filter '{$searchFilter}' onder basis DN '{$searchBase}'...</p>";
$searchResult = ldap_search($ldapConn, $searchBase, $searchFilter);
if (!$searchResult) {
echo "<p style='color: red;'>Fout: LDAP-zoekopdracht mislukt.</p>";
echo "<p style='color: red;'>LDAP-fout: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Verbreek verbinding
die();
}
echo "<p style='color: green;'>Zoekopdracht geslaagd.</p>";
// 4. Zoekresultaat ophalen
$entries = ldap_get_entries($ldapConn, $searchResult);
if ($entries["count"] > 0) {
echo "<p>{$entries["count"]} overeenkomende gebruiker(s) gevonden.</p>";
// Neem de eerste gevonden gebruiker
$userDn = $entries[0]["dn"];
echo "<p>DN van eerste gevonden gebruiker: <strong>{$userDn}</strong></p>";
// 5. Poging tot authenticatie met gevonden gebruikers-DN
echo "<p>Poging tot authenticatie (bind) met gebruikers-DN '{$userDn}'...</p>";
// Let op: dit is een gebruikers-bind, geen admin-bind
if (@ldap_bind($ldapConn, $userDn, $userPasswordToAuthenticate)) {
echo "<p style='color: green;'>Gebruikersauthenticatie geslaagd!</p>";
} else {
echo "<p style='color: red;'>Gebruikersauthenticatie mislukt.</p>";
echo "<p style='color: red;'>LDAP-fout: " . ldap_error($ldapConn) . "</p>";
}
} else {
echo "<p>Geen gebruiker gevonden met filter '{$searchFilter}'.</p>";
}
// 6. LDAP-verbinding sluiten
echo "<p>LDAP-verbinding wordt gesloten...</p>";
ldap_unbind($ldapConn);
echo "<p style='color: green;'>Verbinding gesloten.</p>";
?>
1
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
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
Uitleg bij de voorbeeldcode
- Verbinding (
ldap_connect
): Start een verbinding met de LDAP-server en retourneert een connectiehandle. - Opties instellen (
ldap_set_option
): Bepaalt verbindingsgedrag;LDAP_OPT_PROTOCOL_VERSION, 3
gebruikt LDAPv3 (aanbevolen),LDAP_OPT_REFERRALS, 0
schakelt referrals uit. - Binden (
ldap_bind
): Voer authenticatie uit op de LDAP-server.- Anonieme bind:
ldap_bind($ldapConn)
- zonder DN en wachtwoord; beperkte rechten. - Authentieke bind:
ldap_bind($ldapConn, $dn, $password)
- met DN en wachtwoord; in het voorbeeld wordt eerst de admin gebruikt voor zoeken, daarna de gebruiker zelf voor authenticatie.
- Anonieme bind:
- Zoeken (
ldap_search
): Zoek naar directory-entries onder een bepaalde basis en via een filter. - Entries ophalen (
ldap_get_entries
): Haal alle resultaten uit het zoekresultaat, retour als array. - Verbinding verbreken (
ldap_unbind
): Sluit de verbinding en geeft resources vrij.
Belangrijke aandachtspunten
- LDAP-server vereist: Dit artikel en voorbeeld gaan enkel over het gebruik van de OpenLDAP client-extensie van PHP. Je hebt een werkende LDAP-server nodig om mee te verbinden–lokaal of extern, bijvoorbeeld een OpenLDAP-installatie of een bedrijfs-Active Directory-server.
- Veiligheid: Voeg in productieomgevingen credentials nooit als platte tekst toe in je code, maak gebruik van veilige configuratiebestanden of omgevingsvariabelen en verbind bij voorkeur via LDAPS (SSL/TLS, poort 636) voor versleuteling in plaats van gewone LDAP (poort 389).
- Foutafhandeling: De foutafhandeling in het voorbeeld is basaal. Implementeer in je eigen applicaties robuustere logging en foutafhandeling.
- DN-formaat: DN's (Distinguished Names) moeten qua schrijfwijze exact overeenkomen met de indeling die je LDAP-server vereist.
Veelgestelde vragen (FAQ)
V: Ik zie in phpinfo()
geen ldap
-sectie, of hij is uitgeschakeld. Wat nu?
A: In ServBay staat de PHP OpenLDAP-extensie doorgaans standaard aan. Controleer of je wel naar de juiste PHP-versie kijkt in de uitkomst van phpinfo()
. Blijft het probleem, controleer dan de installatie of herinstalleer het PHP-pakket. Neem indien nodig contact op met de ServBay-ondersteuning.
V: Mijn PHP-code geeft een foutmelding: Call to undefined function ldap_connect()
.
A: De OpenLDAP-extensie voor PHP is dan niet correct geladen of niet geactiveerd. Ga terug naar de vorige sectie en verifieer de status via phpinfo()
.
V: De extensie is actief, maar de verbinding of bind mislukt met een LDAP-fout.
A: Controleer zorgvuldig je verbindingsdata (adres, poort) en bindgegevens (DN, wachtwoord). LDAP-foutmeldingen (verkrijgbaar via ldap_error()
) geven meestal aan wat er misgaat, zoals "Invalid credentials" (ongeldige aanmeldgegevens) of "Can't contact LDAP server" (kan geen verbinding maken). Zorg dat je LDAP-server draait en het netwerk bereikbaar is.
Samenvatting
ServBay biedt een snelle en eenvoudige manier om de OpenLDAP-extensie voor PHP te gebruiken. Met een paar verificatiestappen weet je zeker dat je PHP-omgeving geschikt is voor communicatie met LDAP-servers. Dankzij de krachtige LDAP-functies van PHP kunnen ontwikkelaars moeiteloos functionaliteit als gebruikersauthenticatie en directoryzoekopdrachten toevoegen aan lokale webapplicaties die zij met ServBay bouwen, wat het toepassingsbereik flink verruimt.