adLDAP para Directorio Activo y OpenLDAP


En días pasados publicamos un artículo en el cual utilizábamos como base central de usuarios un directorio profesional (OpenLDAP o Directorio Activo) para guardar las credenciales de nuestros usuarios que acceden al servicio de internet a través de un proxy squid. Hoy les traigo algo que complementa dicha solución. Digamos que necesitan desarrollar una pequeña web donde cada usuario pueda resetear su contraseña del dominio o internet (en este caso es la misma), chequear cuantos usuarios pertenecen a un grupo determinado o mejor aún obtener un listado automático digamos cada lunes con una lista de todos los usuarios que están próximos a cambiar la contraseña o su cuenta ya ha expirado. Que tienen en común todas estas situaciones? pues que necesitamos una vía de conexión entre nuestro sitio Web o script y el protocolo LDAP.

Para aquellos que ya tienen experiencia en PHP con LDAP sabrán que existe una extensión php5-openldap la cual necesitamos para hacer este trabajo. Lo que quizás algunos no sepan es que ya existe una API muy bien desarrollada que implementa muchos de los métodos más útiles y necesarios como son autenticar a un usuario, cambiar credenciales, listado de usuarios en alguna parte de la estructura de árbol del directorio entre otros muchos. Todas estas funcionalidades podemos desarrollarlas desde cero y me incluyo entre los que alguna vez lo hizo, pero al encontrar la librería adLDAP solo me he dedicado a lo que realmente vale la pena y he dejado ese trabajo a la biblioteca adLDAP.

¿Requerimientos para usarla? Pues primeramente y más que obvio tener PHP5 instalado, segundo pues agregar la extensión de la que les hablé anteriormente. Tercero y solo en el caso de que se esté utilizando LDAP en modo seguro adicionar la extensión de compatibilidad con SSL a PHP5.

Su uso es muy simple, y muy parecido a todas las APIs que de vez en vez les comparto. Consta de una clase la cual instanciamos y a través de ella accedemos a todos los métodos necesarios. Una vez instanciada el acceso a la API es completo, por supuesto se recomienda el uso de excepciones en las tareas de conexión al servidor LDAP y en la autenticación, si ninguna de estas falla, pues el control puede ser tan completo como las credenciales usadas te permitan. A continuación les muestro algunos ejemplos básicos de su uso.

Instanciar la clase para su uso:

  require_once(dirname(__FILE__) . '/adLDAP.php');
  // A través de esta variable el acceso a la API es completo y tan sencillo como llamar los métodos implementados
  $adldap = new adLDAP(); 

Recomendamos utilizar excepciones en la conexión al servidor:

  try {
      $adldap = new adLDAP();
  }
  catch (adLDAPException $e) {
      echo $e;
      exit();   
  }

adLDAP tiene por defecto una configuración que por supuesto no debe ser la que utilicemos. El constructor del objeto adLDAP permite pasar valores de configuración.

  require_once(dirname(__FILE__) . '/adLDAP.php');
  $adldap = new adLDAP( array (
            'base_dn'=>'DC=dominio,DC=com',
            'account_suffix'=>'@dominio.com',
            'domainControllers'=>array('servidor1.dominio.com', 'servidor2.dominio.com')));

Las funciones de usuario se pueden ejecutar a través del objeto $adldap->user().

Autenticando un usuario:

  $usuario = $adldap->authenticate('administrator', 'admin123');
  if (!$usuario) {
      die('Errores de credenciales o de conexion...');
  } 

Una vez autenticado podremos realizar todas las tareas que el nivel del usuario permita. En este caso iniciamos con el administrador del dominio por lo cual podremos realizar todo cuanto necesitemos.

Obtener todos los usuarios que pertenecen al Grupo Internet:

  // Devuelve un arreglo donde cada elemento es el nombre de usuario de cada objeto de tipo user perteneciente a dicho grupo
  $internet = $adldap->group()->members('Internet'); 

Como ven las posibilidades son infinitas, borrar usuarios, agregar usuarios o atributos, manejar credenciales, grupos, unidades organizacionales entre muchas cosas más. Básicamente haciendo uso de esta API podremos crear tareas automatizadas o sistemas de gestión de funcionalidades que no vengan implementadas en nuestros Directorios o complementarlo con nuevas. Espero y la usen. Aquí les dejo el enlace de descarga y la documentación. Déjenme saber sus experiencias.

Latest posts by Leroy Ley (see all)

  • Daniel Roman

    que tal Leroy Ley, soy nuevo en estos temas, pero es justo lo que busco toda esta configuracion donde la realizo !! en mi server de DC o en donde !!!!