EXTENSIÓN LDAP DE PHP: GUÍA COMPLETA

La extensión LDAP de PHP es una de las herramientas más potentes para interactuar con servicios de directorio en aplicaciones web. Permite conectar PHP con servidores LDAP, como OpenLDAP, Active Directory de Microsoft u otros, para realizar tareas de autenticación, consulta de usuarios, gestión de grupos y mucho más. Ña documentación oficial se puede consultar en español aquí:https://www.php.net/manual/es/book.ldap.php
La extensión LDAP PHP actúa como puente entre las aplicaciones PHP y estos directorios, permitiendo:
  • Autenticación centralizada de usuarios.
  • Búsquedas eficientes en grandes volúmenes de datos.
  • Gestión automatizada de directorios.
  • Integración con sistemas empresariales como una Intranet, ERP, etc..

Requisitos e Instalación

Linux (Ubuntu/Debian)

Windows

  • Editar el archivo "php.ini".
  • Buscar la línea ";extension=ldap" y quitar el punto y coma.
  • Reiniciar el servidor Apache.
Después de instalar, verificar con "phpinfo()" que aparezca la sección LDAP.

Conceptos Básicos

El manual explica muy bien la estructura de LDAP:
  • La información se organiza en entradas con atributos.
  • Cada entrada se identifica por un DN (Distinguished Name), ejemplo: "cn=Juan Perez,ou=Usuarios,dc=ejemplo,dc=com"
  • La lectura del DN se hace de derecha a izquierda.

Funciones más importantes

La extensión proporciona decenas de funciones. Las más usadas son:

Función Propósito Ejemplo de uso
"ldap_connect()" Conectar al servidor Conexión inicial
"ldap_bind() / ldap_bind_ext()" Autenticarse (login) Validar credenciales
"ldap_search()" Búsqueda general Buscar usuarios
"ldap_read()" Leer una entrada específica Obtener datos de un usuario
"ldap_get_entries()" Obtener resultados como array Procesar resultados
"ldap_add()" Añadir nueva entrada Crear usuarios
"ldap_modify() / ldap_mod_replace()" Modificar atributos Actualizar datos
"ldap_delete()" Eliminar entrada Borrar registros
"ldap_unbind()" Cerrar conexión Buena práctica al finalizar
"ldap_escape()" Escapar cadenas (seguridad) Prevenir inyecciones
"ldap_start_tls()" Iniciar cifrado TLS Seguridad en la conexión
Además, PHP 8+ ofrece clases orientadas a objetos:
  • "LDAP\Connection"
  • "LDAP\Result"
  • "LDAP\ResultEntry"

Ejemplo básico de conexión y búsqueda

// Conexión
$ldap = ldap_connect("ldap://ldap.ejemplo.com", 389) 
   or die("No se pudo conectar al servidor LDAP");

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_start_tls($ldap); // Recomendado para seguridad

// Bind (autenticación)
if (ldap_bind($ldap, "cn=admin,dc=ejemplo,dc=com", "password")) {
    echo "Conexión exitosa
"; // Búsqueda $filtro = "(uid=juan*)"; $resultado = ldap_search($ldap, "ou=usuarios,dc=ejemplo,dc=com", $filtro); $entradas = ldap_get_entries($ldap, $resultado); echo "Usuarios encontrados: " . $entradas['count']; } else { echo "Error de autenticación: " . ldap_error($ldap); } ldap_unbind($ldap);

Mejores Prácticas y Seguridad

  • Usar siempre usa LDAPS (puerto 636) o "ldap_start_tls()".
  • Escapa todos los datos de usuario con "ldap_escape()".
  • Maneja errores correctamente usando "ldap_errno()" y "ldap_error()".
  • Implementa paginación para búsquedas grandes "ldap_control_paged_result".
  • Cierra las conexiones con "ldap_unbind()".
  • En entornos modernos, considera combinar LDAP con OAuth2 o SAML para autenticación