Consultar LDAP desde PHP

1.4/5 - (30 votos)

Un elemento en común entra las empresas, organizaciones, universidades, etc, es el uso de LDAP como directorio activo para los usuarios.

Pues con la entrada de hoy voy a explicar como se realiza una consulta ldap en php.

Lo primero que haremos es habilitar la extensión phpLDAP para poder consultar el LDAP, dependiendo del sistema operativo utilizado.

//windows habilitar extension=php_ldap.dll
//centos 7: yum install php-ldap
//debian apt-get install php7.0-ldap

Y lo siguiente es utilizar un servidor ldap para realizar las pruebas, para el ejemplo he utilizado zflexsoftware que es libre, para realizar pruebas. https://www.zflexsoftware.com/index.php/pages/free-online-ldap

Para realizar la aplicación separaremos las variables de configuración en un fichero config.php, con la url del servidor ldap, usuario y contraseña para autenticar, la base del ldap, la base de la búsqueda y la columna que queremos buscar.

$config['version'] = '1.0';
$config['urlLdap'] = 'ldap://www.zflexldap.com:389';
$config['baseLdap'] = 'dc=zflexsoftware,dc=com';
$config['usernameConsultaLdap'] = 'cn=ro_admin,ou=sysadmins,dc=zflexsoftware,dc=com';
$config['passwordConsultaLdap'] = 'zflexpass';
$config['baseSearch'] = 'ou=users,ou=guests,dc=zflexsoftware,dc=com';
$config['columnaLdap'] = 'mail';

Y en la aplicación index.php, utilizaremos las siguientes funciones:

//Conexión al servidor LDAP: 
$ldapbind =  ldap_connect($config['urlLdap'])
//Autenticación  LDAP: 
$ldapbind =  ldap_bind($ldapconn, $config['usernameConsultaLdap'], $config['passwordConsultaLdap'])
//Búsqueda LDAP: 
$serch = ldap_search($ldapconn, $config['baseSearch'], "uid=*")

En el ejemplo queremos tener todos los mails del dominio con lo que usaremos el comodín * para cada uid y solicitamos la columna mail.

El resultado devuelto es un array multidimensional que recorremos con un bucle for.

            for ($i = 0; $i < count($data); $i++) {             
                    echo $data[$i][$config['columnaLdap']][0];
            }

El resultado seria el siguiente:

El código utilizado es el siguiente:

<?php
//config.php
$config['version'] = '1.0';
$config['urlLdap'] = 'ldap://www.zflexldap.com:389';
$config['baseLdap'] = 'dc=zflexsoftware,dc=com';
$config['usernameConsultaLdap'] = 'cn=ro_admin,ou=sysadmins,dc=zflexsoftware,dc=com';
$config['passwordConsultaLdap'] = 'zflexpass';
$config['baseSearch'] = 'ou=users,ou=guests,dc=zflexsoftware,dc=com';
$config['columnaLdap'] = 'mail';
?>
<?php
//index.php

require './config.php';

//windows extension=php_ldap.dll
//centos 7: yum install php-ldap
//debian apt-get install php7.0-ldap
//https://www.zflexsoftware.com/index.php/pages/free-online-ldap

// conexión al servidor LDAP
$ldapconn = ldap_connect($config['urlLdap']) or die("Could not connect to LDAP server.");

if ($ldapconn) {
    // realizando la autenticación
    $ldapbind = ldap_bind($ldapconn, $config['usernameConsultaLdap'], $config['passwordConsultaLdap']) or die("Error trying to bind: " . ldap_error($ldapconn));
    
    // verificación del enlace
    if ($ldapbind) {
        $search = ldap_search($ldapconn, $config['baseSearch'], "uid=*") or die("Error in search query: " . ldap_error($ldapconn));
        
        //validamos busqueda
        if ($search) {
            $data = ldap_get_entries($ldapconn, $search);
            
            echo '<h1>Listado de emails</h1>';
            echo '<br>';
            
            //recorremos busqueda
            for ($i = 0; $i < count($data); $i++) {             
                if (isset($data[$i][$config['columnaLdap']][0])) {
                    echo $data[$i][$config['columnaLdap']][0];
                    echo '<br>';
                }
            }
            
        }
    }   
    ldap_close($ldapconn);   
}
?> 

Y lo podéis descargar desde aquí: https://github.com/victorgarciasisi/testLDAP

9 comentarios en «Consultar LDAP desde PHP»

  1. Hola, gracias por compartir. Solo un tema, creo que el servidor publico de ejemplo no esta activo mas, pero lo probe con el mio y funcionó. Claro que antes tuve que cambiar el uid por el sAMAccountName, ya que yo lo utilizo asi en mi servidor. Espero que a alguien mas le ayude.
    Gracias nuevamente

    Responder
  2. Y cómo comprobar si mi sitio web php está en un dominio AD (LDAP) o no, para en este caso hacer una validación LDAP, y en otro caso, otra validación (por ejemplo, contra BD MySQL), facilitando de esta forma la portabilidad de mi desarrollo???

    Me se entiende?? 😀

    Gracias!!

    Responder
  3. Gracias, yo tengo un login en windows con xampp , pero al pasar la palicacion a centos 7, no me funciona, ya instale ldap php y habilite los so, pero no conecta, alguien sabe algo mas que pueda rebizar,Muchas gracias. al probar con estos archivos cambiando los parametros me genera el siguiente error. Error trying to bind: Can’t contact LDAP server
    el servidor si se conecta con el servidor ldap, por que el login de la maquina lo hacemos contra ldap, el problema es solo con la palicacon que tengo mondata con php.

    Responder
  4. Hola
    Muy buena explicación, podrías compartir con la comunidad cómo poder saber a partir de un usuario válido a que grupo pertenece desde mi web con algún tipo de consulta? Es decir, cuando valido que un usuario existe como puedo saber a que grupo pertenece.
    Gracias

    Responder
  5. Buenas tardes, encantado de saludarte. Soy Jose
    Quería escribirte porque me ha parecido interesante comentar contigo la posibilidad de que tu negocio aparezca cada mes en periódicos digitales como noticia para posicionar en los primeros lugares de internet, es decir, con artículos reales dentro del periódico que no se marcan como publicidad y que no se borran.
    La noticia es publicada por más de cuarenta periódicos de gran autoridad para mejorar el posicionamiento de tu web y la reputación.

    ¿Podrías facilitarme un teléfono para ofrecerte un mes gratuito?
    Gracias

    Responder

Deja un comentario