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
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
Muchas gracias Mario por colaborar.
Actualizare el servidor publico, poruqe cuando cree la entrada si que era funcional.
Un saludo.
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!!
Correcto
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.
Parece que no esta alcanzando el servidor LDAP -> Can’t contact LDAP server, revise que esta todo correcto
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
Puedes servirte de la wiki https://ldapwiki.com/wiki/LDAP%20Query%20Examples para realizar este tipo de consultas
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