Utilisation de l’extension OpenLDAP de PHP avec ServBay
ServBay est un puissant environnement de développement web local qui supporte de nombreux stacks technologiques. Pour les développeurs PHP ayant besoin d’interagir avec un serveur LDAP (Lightweight Directory Access Protocol), ServBay inclut en préinstallation l’extension OpenLDAP pour PHP, qui peut être facilement activée et utilisée. Ce guide vous explique comment exploiter cette extension dans ServBay, notamment pour l’authentification des utilisateurs, l’interrogation d’annuaires et d’autres cas d’usage associés.
Qu’est-ce qu’OpenLDAP et l’extension OpenLDAP de PHP ?
OpenLDAP est une implémentation open source populaire offrant des fonctionnalités de service d’annuaire basées sur le protocole LDAP. Celui-ci est largement utilisé dans les entreprises pour l’authentification des utilisateurs, la gestion des structures organisationnelles, les services de type carnet d’adresses, etc.
L’extension OpenLDAP de PHP (généralement appelée l’extension ldap
) est un module qui permet à PHP de communiquer avec un serveur LDAP via une série de fonctions dédiées. Grâce à cette extension, vos applications PHP peuvent se connecter à un serveur LDAP et effectuer des opérations comme la connexion (bind/authentification), la recherche, l’ajout, la modification ou la suppression d’entrées dans l’annuaire.
Dans ServBay, l’élément clé est l’extension cliente OpenLDAP intégrée à PHP, qui permet à votre code PHP de se connecter et d’interagir avec des serveurs LDAP externes. ServBay n’intègre cependant pas de serveur OpenLDAP lui-même.
Fonctionnalités principales de l’extension PHP OpenLDAP
Avec l’extension OpenLDAP de PHP, vous pouvez :
- Se connecter à un serveur LDAP : établir la connexion avec un serveur LDAP spécifié.
- Effectuer des opérations de liaison (bind) : effectuer un bind anonyme ou authentifié avec un DN (Distinguished Name) et un mot de passe.
- Rechercher dans l’annuaire : interroger les entrées selon des filtres, une base de recherche et une portée.
- Lire les informations d’une entrée : obtenir les attributs et valeurs de chaque entrée dans les résultats de recherche.
- Effectuer des modifications : ajouter de nouvelles entrées, supprimer ou modifier des propriétés d’entrées.
- Gérer les erreurs LDAP : récupérer les messages d’erreur en cas d’échec lors d’une opération.
Compatibilité des versions de l’extension PHP OpenLDAP dans ServBay
ServBay prend en charge l’installation et l’exécution de plusieurs versions de PHP. L’extension OpenLDAP de PHP est généralement incluse dans les distributions officielles de PHP, et elle est activée par défaut dans les packages PHP proposés par ServBay. Ainsi, la plupart du temps, en utilisant une des versions PHP fournies par ServBay, vous disposez déjà de l’extension OpenLDAP.
Comment vérifier si l’extension PHP OpenLDAP est activée
Même si ServBay vise à fournir un environnement prêt à l’emploi avec les extensions courantes activées par défaut, il est toujours pertinent de vérifier leur statut. Le moyen le plus simple est d’utiliser la fonction phpinfo()
.
Dans le répertoire racine de votre site géré par ServBay (par défaut
/Applications/ServBay/www
), créez un fichier PHP, par exempleinfo.php
.Ajoutez le contenu suivant à ce fichier :
php<?php phpinfo(); ?>
1
2
3Accédez à ce fichier via le navigateur à l’adresse liée à votre site ServBay (par exemple
http://servbay.demo/info.php
).Sur la page générée par
phpinfo()
, cherchez une section intituléeldap
.Si la section
ldap
apparaît et affiche des informations de configuration (commeLDAP Support enabled
), l’extension PHP OpenLDAP est activée et chargée.
Si vous ne trouvez pas la section ldap
ou que LDAP Support
s’affiche comme désactivé, il est possible que la configuration de compilation de PHP dans ServBay pose problème, auquel cas il faudra la vérifier ou contacter le support ServBay. Toutefois, cela reste rare car l’extension est en principe activée par défaut.
Utiliser OpenLDAP en PHP
Une fois l’extension OpenLDAP activée, vous pouvez exploiter dans votre code PHP toute la gamme des fonctions ldap_*
pour dialoguer avec votre serveur LDAP. Voici un exemple de base illustrant la connexion à un serveur LDAP, l’authentification administrateur, la recherche d’un utilisateur et la tentative d’authentification de cet utilisateur.
Important : les paramètres (adresse et port du serveur LDAP, DN administrateur, mot de passe, base de recherche, filtre utilisateur, etc.) utilisés dans l’exemple ci-dessous sont des exemples fictifs. Remplacez-les dans votre code par les informations de votre propre serveur LDAP et ne stockez jamais en clair un mot de passe en production.
Exemple de code : connexion, recherche et authentification de base
Enregistrez ce code comme un fichier PHP (par exemple ldap_test.php
) dans le dossier de votre site ServBay et exécutez-le via le navigateur.
<?php
// --- Configuration de la connexion LDAP ---
// À remplacer par l’adresse de votre serveur LDAP. Utilisez le préfixe ldaps:// pour SSL/TLS (port par défaut 636)
$ldapURI = "ldap://ldap.example.com:389";
// Remplacez par le DN (Distinguished Name) de votre administrateur LDAP ou d’un utilisateur disposant des droits de recherche
$ldapAdminRdn = "cn=admin,dc=example,dc=com";
// Remplacez par le mot de passe associé au DN administrateur ci-dessus
$ldapAdminPassword = "admin_password";
// --- Configuration pour la recherche et l’authentification utilisateur ---
// Base de recherche : à remplacer par le DN racine pertinent de votre annuaire LDAP
$searchBase = "dc=example,dc=com";
// Filtre de recherche : par exemple pour cibler l’utilisateur ayant pour uid ‘servbay-demo’
$searchFilter = "(uid=servbay-demo)";
// Mot de passe de l’utilisateur à authentifier
$userPasswordToAuthenticate = "user_password_for_servbay_demo";
echo "<h2>Exemple OpenLDAP PHP sous ServBay</h2>";
// 1. Connexion au serveur LDAP
echo "<p>Tentative de connexion au serveur LDAP : {$ldapURI}...</p>";
$ldapConn = ldap_connect($ldapURI);
if (!$ldapConn) {
die("<p style='color: red;'>Erreur : impossible de se connecter au serveur LDAP.</p>");
}
echo "<p style='color: green;'>Connexion au serveur LDAP réussie.</p>";
// Réglage des options LDAP (protocole version 3 conseillé, referrals désactivés)
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);
// 2. Liaison via le DN administrateur (nécessaire pour exécuter les recherches)
echo "<p>Tentative de bind avec l’administrateur DN '{$ldapAdminRdn}'...</p>";
if (!ldap_bind($ldapConn, $ldapAdminRdn, $ldapAdminPassword)) {
echo "<p style='color: red;'>Erreur : échec du bind administrateur.</p>";
echo "<p style='color: red;'>Erreur LDAP : " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Fermeture de la connexion
die();
}
echo "<p style='color: green;'>Bind administrateur réussi.</p>";
// 3. Recherche de l’utilisateur dans l’annuaire
echo "<p>Recherche, dans la base '{$searchBase}', du filtre '{$searchFilter}'...</p>";
$searchResult = ldap_search($ldapConn, $searchBase, $searchFilter);
if (!$searchResult) {
echo "<p style='color: red;'>Erreur : la recherche LDAP a échoué.</p>";
echo "<p style='color: red;'>Erreur LDAP : " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Fermeture de la connexion
die();
}
echo "<p style='color: green;'>Recherche réussie.</p>";
// 4. Récupération des résultats
$entries = ldap_get_entries($ldapConn, $searchResult);
if ($entries["count"] > 0) {
echo "<p>{$entries["count"]} entrée(s) correspondante(s) trouvée(s).</p>";
// On considère seulement la première entrée trouvée
$userDn = $entries[0]["dn"];
echo "<p>DN du premier utilisateur correspondant : <strong>{$userDn}</strong></p>";
// 5. Tentative de bind avec le DN utilisateur et son mot de passe à authentifier
echo "<p>Tentative de bind/authentification de l’utilisateur '{$userDn}'...</p>";
// Note : il s’agit d’un bind utilisateur, différent du bind administrateur effectué plus haut
if (@ldap_bind($ldapConn, $userDn, $userPasswordToAuthenticate)) {
echo "<p style='color: green;'>Authentification utilisateur réussie !</p>";
} else {
echo "<p style='color: red;'>Échec de l’authentification utilisateur.</p>";
echo "<p style='color: red;'>Erreur LDAP : " . ldap_error($ldapConn) . "</p>";
}
} else {
echo "<p>Aucun utilisateur trouvé pour le filtre '{$searchFilter}'.</p>";
}
// 6. Fermeture de la connexion LDAP
echo "<p>Fermeture de la connexion LDAP...</p>";
ldap_unbind($ldapConn);
echo "<p style='color: green;'>Connexion fermée.</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
Explications sur le code
- Connexion (
ldap_connect
) : établit une connexion avec le serveur LDAP, et renvoie un identifiant de connexion. - Configuration (
ldap_set_option
) : règle les paramètres de connexion.LDAP_OPT_PROTOCOL_VERSION, 3
force l’utilisation du protocole LDAPv3 (recommandé).LDAP_OPT_REFERRALS, 0
désactive la gestion des referrals, inutile dans la plupart des cas simples. - Bind (
ldap_bind
) : authentifie la connexion LDAP.- Liaison anonyme :
ldap_bind($ldapConn)
– sans DN ni mot de passe, accès généralement très limité. - Liaison authentifiée :
ldap_bind($ldapConn, $dn, $password)
– utilise le DN/mot de passe indiqué. Notre exemple commence par un bind administrateur pour effectuer la recherche, puis exécute un bind utilisateur pour l’authentification.
- Liaison anonyme :
- Recherche (
ldap_search
) : sous le DN racine choisi (searchBase
), retrouve les entrées correspondant au filtre (searchFilter
). - Lecture des entrées (
ldap_get_entries
) : extrait les résultats de recherche sous forme de tableau. - Fermeture (
ldap_unbind
) : met fin à la connexion LDAP et libère les ressources.
Points d’attention
- Besoin d’un serveur LDAP : Cette documentation concerne exclusivement l’utilisation du client OpenLDAP avec PHP. Il est nécessaire de disposer d’un serveur LDAP accessible (en local – mais indépendant de ServBay – ou distant, par exemple Active Directory en entreprise).
- Sécurité : En production, suivez toujours les bonnes pratiques pour gérer les identifiants LDAP : stockez-les dans des variables d’environnement ou des fichiers de configuration sécurisés, et préférez LDAPS (SSL/TLS, port 636) à une connexion non chiffrée (port 389).
- Gestion des erreurs : Le traitement des erreurs ci-dessus est volontairement simple ; pour une application réelle, prévoyez une gestion robuste des exceptions et une journalisation précise.
- Format du DN : Le format du DN (Distinguished Name) doit respecter la configuration de votre annuaire LDAP, sous peine d’échec d’authentification.
Foire aux questions (FAQ)
Q : Je ne vois pas la section ldap
dans phpinfo()
, ou bien elle est désactivée. Que faire ?
R : Sous ServBay, l’extension OpenLDAP de PHP est généralement activée par défaut. Vérifiez que vous regardez bien la sortie de phpinfo()
de la version PHP attendue. Si besoin, réinstallez le package PHP correspondant via ServBay ou contactez le support.
Q : Une erreur Call to undefined function ldap_connect()
apparaît dans mon code PHP.
R : Cela signifie que l’extension OpenLDAP n'est pas chargée ou activée. Retournez à la section précédente pour vérifier le statut via phpinfo()
.
Q : L’extension est activée mais la connexion ou le bind échoue avec une erreur LDAP.
R : Vérifiez soigneusement vos paramètres de connexion (adresse, port du serveur) et les identifiants utilisés (DN, mot de passe). Les messages d’erreur LDAP (via ldap_error()
) donnent des indices, comme « Invalid credentials » ou « Can't contact LDAP server ». Assurez-vous aussi du bon fonctionnement réseau et de l’accessibilité du serveur LDAP.
Conclusion
ServBay propose un moyen simple et efficace d’accéder à l’extension OpenLDAP de PHP. Après une vérification rapide, vous êtes assuré de la capacité de votre environnement PHP à interagir avec des serveurs LDAP. Grâce à la bibliothèque de fonctions LDAP de PHP, il devient possible d’ajouter sans difficulté l’authentification utilisateur, la consultation d’annuaires et beaucoup d’autres fonctionnalités à vos applications web locales sous ServBay, ouvrant ainsi de nouveaux horizons pour vos développements.