Utilizzo dell'estensione OpenLDAP di PHP in ServBay
ServBay è un potente ambiente di sviluppo web locale che supporta diversi stack tecnologici. Per gli sviluppatori PHP che devono interagire con server LDAP (Lightweight Directory Access Protocol), ServBay include già l’estensione OpenLDAP di PHP, facilmente abilitabile e pronta all’uso. In questo articolo ti spiegheremo come utilizzare questa estensione in ServBay per implementare funzionalità come l’autenticazione degli utenti e le ricerche nelle directory.
Cos’è OpenLDAP e l’estensione OpenLDAP di PHP?
OpenLDAP è una delle implementazioni open source più diffuse che fornisce funzionalità di directory basate sul protocollo LDAP. Il protocollo LDAP è un protocollo applicativo utilizzato per accedere e gestire servizi di directory distribuiti, comunemente impiegato nelle aziende per autenticazione utenti, gestione di strutture organizzative, rubrica aziendale e altro ancora.
L’estensione OpenLDAP di PHP (spesso chiamata estensione ldap
) è un modulo di PHP che offre una libreria di funzioni per comunicare con i server LDAP. Attraverso questa estensione, un'applicazione PHP può connettersi a un server LDAP, effettuare operazioni di bind (autenticazione), ricerca, aggiunta, modifica e cancellazione delle voci nella directory.
In ServBay, ciò che interessa principalmente è questa estensione client OpenLDAP integrata in PHP, che permette al tuo codice PHP di connettersi e operare con server LDAP esterni. ServBay non include un server OpenLDAP.
Funzionalità principali dell'estensione OpenLDAP di PHP
Con l’estensione OpenLDAP di PHP puoi:
- Connetterti a un server LDAP: stabilire una connessione verso un server LDAP specifico.
- Effettuare operazioni di bind/autenticazione: eseguire bind anonimo oppure autenticarsi tramite DN (Distinguished Name) e password.
- Effettuare ricerche nella directory: cercare voci nella directory utilizzando filtri, base DN e scope di ricerca personalizzati.
- Leggere attributi delle voci: recuperare proprietà e valori delle voci trovate.
- Eseguire modifiche alla directory: aggiungere nuove voci, cancellare o modificare attributi delle voci esistenti.
- Gestire errori LDAP: ottenere informazioni sugli errori se un’operazione fallisce.
Compatibilità dell’estensione OpenLDAP di PHP in ServBay
ServBay permette di installare e utilizzare più versioni di PHP. L’estensione OpenLDAP di PHP è generalmente inclusa di default nei pacchetti PHP ufficiali, e anche nei package PHP forniti da ServBay. Quando utilizzi una versione di PHP integrata in ServBay, molto probabilmente l’estensione OpenLDAP è già abilitata.
Come verificare se l’estensione OpenLDAP di PHP è abilitata
Anche se ServBay offre un ambiente “ready to use” e generalmente le estensioni più comuni sono già abilitate, è sempre buona prassi verificarne lo stato. Il metodo più semplice è usare la funzione phpinfo()
.
Nella root del sito servito da ServBay (di default
/Applications/ServBay/www
), crea un nuovo file PHP chiamato ad esempioinfo.php
.Inserisci nel file
info.php
il seguente contenuto:php<?php phpinfo(); ?>
1
2
3Accedi a questo file tramite il browser usando l’URL configurato in ServBay (ad esempio
http://servbay.demo/info.php
).Verifica che sia presente una sezione chiamata
ldap
nella pagina di output diphpinfo()
.Se trovi la sezione
ldap
e vedi configurazioni comeLDAP Support enabled
, significa che l’estensione OpenLDAP di PHP è stata caricata e abilitata con successo.
Se non trovi la sezione ldap
, o se indica LDAP Support: disabled
, ti consigliamo di controllare la configurazione di build della specifica versione di PHP in ServBay o contattare il supporto ServBay per assistenza. Nella maggior parte dei casi l’estensione è già attiva di default.
Utilizzare OpenLDAP in PHP
Una volta verificata l’abilitazione dell’estensione OpenLDAP, puoi usare le funzioni della famiglia ldap_*
nelle tue applicazioni PHP per comunicare con il server LDAP. Di seguito un esempio base di come connettersi a un server LDAP, effettuare il bind come amministratore, cercare utenti ed eseguire l’autenticazione.
Nota importante: gli indirizzi del server LDAP, porta, DN amministratore, password, base di ricerca, filtri utenti, password utente e così via presenti nell’esempio sono placeholders. Sostituiscili sempre con i valori reali e le credenziali della tua infrastruttura LDAP. Non inserire mai direttamente in codice in produzione credenziali sensibili.
Esempio: Connessione, ricerca e autenticazione base
Salva il codice seguente come file PHP (es. ldap_test.php
) nella directory del tuo sito ServBay e accedilo tramite browser.
<?php
// --- Configurazione connessione LDAP ---
// Sostituisci con l'indirizzo del tuo server LDAP. Per LDAPS (SSL/TLS) usa il prefisso ldaps:// e normalmente la porta 636.
$ldapURI = "ldap://ldap.example.com:389";
// Sostituisci con il DN dell’amministratore LDAP o di un utente con permessi di ricerca
$ldapAdminRdn = "cn=admin,dc=example,dc=com";
// Sostituisci con la password corrispondente al DN amministratore
$ldapAdminPassword = "admin_password";
// --- Configurazione ricerca e autenticazione utente ---
// Sostituisci con la base DN dove risiedono gli utenti
$searchBase = "dc=example,dc=com";
// Sostituisci con il filtro per cercare uno specifico utente; es. cerca l’utente con uid 'servbay-demo'
$searchFilter = "(uid=servbay-demo)";
// Sostituisci con la password dell’utente da autenticare
$userPasswordToAuthenticate = "user_password_for_servbay_demo";
echo "<h2>Esempio OpenLDAP in PHP su ServBay</h2>";
// 1. Connessione al server LDAP
echo "<p>Tentativo di connessione al server LDAP: {$ldapURI}...</p>";
$ldapConn = ldap_connect($ldapURI);
if (!$ldapConn) {
die("<p style='color: red;'>Errore: impossibile connettersi al server LDAP.</p>");
}
echo "<p style='color: green;'>Connessione al server LDAP riuscita.</p>";
// Imposta opzioni LDAP (è consigliabile impostare la versione del protocollo e disabilitare i referrals)
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);
// 2. Bind come amministratore per operazioni di ricerca/autorizzate
echo "<p>Tentativo di bind con DN amministratore '{$ldapAdminRdn}'...</p>";
if (!ldap_bind($ldapConn, $ldapAdminRdn, $ldapAdminPassword)) {
echo "<p style='color: red;'>Errore: bind dell’amministratore fallito.</p>";
echo "<p style='color: red;'>Errore LDAP: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Chiude connessione
die();
}
echo "<p style='color: green;'>Bind amministratore riuscito.</p>";
// 3. Ricerca utente
echo "<p>Tentativo di ricerca in base DN '{$searchBase}' con filtro '{$searchFilter}'...</p>";
$searchResult = ldap_search($ldapConn, $searchBase, $searchFilter);
if (!$searchResult) {
echo "<p style='color: red;'>Errore: ricerca LDAP fallita.</p>";
echo "<p style='color: red;'>Errore LDAP: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Chiude connessione
die();
}
echo "<p style='color: green;'>Ricerca completata con successo.</p>";
// 4. Recupero risultati della ricerca
$entries = ldap_get_entries($ldapConn, $searchResult);
if ($entries["count"] > 0) {
echo "<p>Trovate {$entries["count"]} voci corrispondenti.</p>";
// Si assume che ci interessa solo il primo utente trovato
$userDn = $entries[0]["dn"];
echo "<p>DN del primo utente corrispondente: <strong>{$userDn}</strong></p>";
// 5. Prova di autenticazione bind con DN e password dell’utente trovato
echo "<p>Tentativo di bind di autenticazione come utente DN '{$userDn}'...</p>";
// Nota: si effettua il bind come utente invece che come amministratore
if (@ldap_bind($ldapConn, $userDn, $userPasswordToAuthenticate)) {
echo "<p style='color: green;'>Autenticazione utente riuscita!</p>";
} else {
echo "<p style='color: red;'>Autenticazione utente fallita.</p>";
echo "<p style='color: red;'>Errore LDAP: " . ldap_error($ldapConn) . "</p>";
}
} else {
echo "<p>Nessun utente trovato per il filtro '{$searchFilter}'.</p>";
}
// 6. Chiudi connessione LDAP
echo "<p>Chiusura connessione LDAP...</p>";
ldap_unbind($ldapConn);
echo "<p style='color: green;'>Connessione chiusa.</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
Spiegazione del codice
- Connessione (
ldap_connect
): apre una connessione verso il server LDAP e restituisce un identificatore della connessione. - Impostazione delle opzioni (
ldap_set_option
): configura il comportamento della connessione.LDAP_OPT_PROTOCOL_VERSION, 3
usa il protocollo LDAP v3 (consigliato);LDAP_OPT_REFERRALS, 0
disabilita i referrals (in applicazioni semplici solitamente non servono). - Bind (
ldap_bind
): esegue l’autenticazione verso il server LDAP.- Bind anonimo:
ldap_bind($ldapConn)
— senza DN e password, di solito con permessi limitati. - Bind autenticato:
ldap_bind($ldapConn, $dn, $password)
— utilizza DN e password specifici. Nell’esempio si usa prima il bind come amministratore per le ricerche, poi il bind come utente per l’autenticazione.
- Bind anonimo:
- Ricerca (
ldap_search
): effettua la ricerca delle voci nella directory usando una base DN (searchBase
) e un filtro (searchFilter
). - Recupero voci (
ldap_get_entries
): estrae tutte le voci corrispondenti dal risultato della ricerca, restituendo un array con le informazioni delle voci. - Chiusura (
ldap_unbind
): termina la connessione con il server LDAP e libera le risorse.
Considerazioni
- Server LDAP richiesto: Questa guida e l’esempio sono riferiti solo all’utilizzo client di OpenLDAP in PHP. Devi disporre di un server LDAP accessibile (locale, separato da ServBay, o remoto, come Active Directory aziendale).
- Sicurezza: In ambienti di produzione gestisci sempre le credenziali LDAP nel rispetto delle best practice di sicurezza, ad esempio usando variabili d’ambiente, file di configurazione sicuri, e connessioni cifrate via LDAPS (porta 636) invece della porta LDAP non cifrata standard 389.
- Gestione errori: L’esempio qui presentato gestisce gli errori in modo essenziale; in applicazioni reali implementa una gestione degli errori e logging più robusta.
- Formato DN: Il DN (Distinguished Name) è molto preciso. Assicurati che il formato usato sia corretto e coerente con la configurazione del tuo server LDAP.
Domande frequenti (FAQ)
D: Non vedo la sezione ldap
in phpinfo()
oppure risulta disabilitata. Cosa posso fare?
R: In ServBay, l’estensione OpenLDAP di PHP è normalmente abilitata di default. Accertati di visualizzare il phpinfo()
della versione di PHP corretta. Se ancora non appare, potrebbe esserci un’anomalia nella versione specifica o nella tua installazione di ServBay: prova a reinstallare il pacchetto PHP di ServBay, oppure contatta il supporto tecnico.
D: Il mio codice PHP restituisce l’errore Call to undefined function ldap_connect()
.
R: Questo significa che l’estensione OpenLDAP di PHP non è stata caricata o abilitata. Torna alla sezione precedente e verifica tramite phpinfo()
lo stato dell’estensione.
D: L’estensione è abilitata ma la connessione o il bind falliscono mostrando errori LDAP.
R: Verifica attentamente i parametri di connessione (indirizzo server, porta) e le credenziali (DN, password). I messaggi di errore LDAP (con ldap_error()
) spesso indicano la causa, ad esempio “Invalid credentials” (credenziali non valide) o “Can't contact LDAP server” (impossibile connettersi al server LDAP). Accertati che il server LDAP sia attivo e raggiungibile in rete.
Conclusioni
ServBay offre un modo semplice e immediato per utilizzare l’estensione OpenLDAP di PHP. Con pochi passi di verifica, puoi assicurarti che il tuo ambiente PHP sia pronto per comunicare con server LDAP esterni. Sfruttando la potente libreria LDAP di PHP, gli sviluppatori possono integrare facilmente funzionalità di autenticazione utente, ricerche su directory e molto altro nelle applicazioni web locali basate su ServBay, ampliando notevolmente i possibili scenari d’uso.