Usar LDAP en el Login para validar usuarios del AD

Estoy jugando un poco con G3W probando las diferentes maneras de login y recupero de contraseña.

El login y recupero de contraseña contra informix está funcionando…

¿Hay algo hecho con respecto a loguearse en G3W contra un AD usando LDAP? En mi config.php no veo ninguna flag que permita activar/desactivar este tipo de autenticación… pero veo que hay 2 módulos dedicados a LDAP a modo de personalizaciones comunes:

  • src\pers\comun\modelo\autenticacion\auth_ldap.php
  • src\pers\comun\modelo\autenticacion\fuente_usuarios_guarani.php

Todos los docentes tienen usuario en el AD, así que si se puede activar este tipo de autenticación mucho mejor :smiley:

Hola Diego, no se viste el foro http://foro.comunidad.siu.edu.ar/index.php?topic=9144.msg39511

saludos,
Ana María

No, sinceramente ese hilo no lo había visto… Ya lo estoy leyendo y cualquier cosa repregunto en este otro hilo.

Muchas gracias!

Ya leí la wiki (http://portalguarani.siu.edu.ar/Portal/wiki/G2/ConsideracionesTecnicas/LDAP)… y quizás mi cabeza un viernes a la tarde ya no es la del lunes, pero no me quedó nada claro :frowning:

Cuando en validar_user_pass se hace:

   $parametros_conexion = $this->get_parametros();
   $id_persona = $this->get_clase_usuarios()->autenticar_ldap($parametros_conexion, $usuario, $password);

Solamente trae el usuario y la clave… pero en mi config.php no hay donde poner la configuración del controlador de dominio.

Se me ocurre agregar en config.php al mismo nivel que smtp y accesos una estructura como la siguiente:

        'ldap' => array(
            'server' => 'DC.INST.EDU.AR',
            'user' => 'superuser',
            'pwd' => 'clavesuperuser',
            'port' => 389
            'ssl' => true,
        )

Lo anterior basándome en http://php.net/manual/es/ref.ldap.php específicamente en la función ldap_connect.

y en auth_ldap.php algo parecido a esto:

    protected function validar_user_pass($usuario, $password)
    {
        // leemos los parámetros de configuración
        $this->config_ldap = kernel::proyecto()->get_parametros_ldap(); 

        $ldaphost = $this->config_ldap['server'];
        $seguro = $this->config_ldap['ssl'];
        $ldapport = $this->config_ldap['port'];
        $ldaprdn = $this->config_ldap['user'];
        $ldappass = $this->config_ldap['pwd'];

        if ($seguro) {
            $ldaphost = "ldaps://$ldaphost/";
        }

        // Conexión al servidor LDAP
        $ldapconn = ldap_connect($ldaphost, $ldapport) or die("Could not connect to $ldaphost");

        if ($ldapconn) {
            // realizando la autenticación
            $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

            // acá linkear el usuario de dominio con el perfil del usuario en g3w
            // $id_persona = $this->get_clase_usuarios()->autenticar_ldap($parametros_conexion, $usuario, $password);

            // verificación del enlace
            if (!$ldapbind) {
                //contar intentos fallidos
                intentos_login::eliminar($usuario);
                die("LDAP bind failed...");
            }
        }
        
        return $id_persona;

    }

NOTA: eso ya se que está roto e incompleto… pero por hoy no haré más nada y quería compartirlo aunque esté inconcluso :smiley:

Cosas que faltan:

  • Si no es un usuario válido en el dominio, intentar usar la autenticación tradicional de G3W.
  • Reemplazar los DIE por mensajes de error estandars de 3w
  • Que el código en general funcione :wink:
  • Adaptar el circuito de recuperación de la clave… y si el usuario es un usuario de dominio en vez de dar oportunidad de recuperar la pwd informar que debe presentarse en determinado lugar para cambiarla, otro mensaje parecido, o agregar la opción de cambio de claves de dominio simil este ejemplo: https://gist.github.com/mattrude/657334#file-changepassword-php

No pensaba seguir con este tema hasta el lunes… pero seguí… y ya está funcionando la validación.

Solo queda pendiente linkear el usuario de dominio con el usuario de autogestion…

El tema es que los usuarios de Guarani 3W y sus perfiles se guardan en acc_usuarios_ag y en esta tabla se utiliza un identificador diferente…

Quizás lo bueno es que Guarani 2 actualmente usa usuarios de dominio, así que en acc_usuarios tengo los usuarios de dominio con permisos en Guarani 2.

Escucho sugerencias… aunque ya me estoy imaginando la solución (esto Sí queda para el lunes que viene:)

Sigo con este tema…

Esta funcionando todo… si debugueo paso por paso todo funciona como debe funcionar.
pero el 50% de las veces (que no debugueo) después del intento de loguin se queda la pantalla en blanco (como si no se terminara de cargar o si la cache no terminase de vaciarse). Click en refresh, confirmo el reenvio de los datos y funciona OK otra vez el 50% de las veces o se puede repetir.

Les adjunto los archivos involucrados en el loguin… pero ya les advierto que sin un server de dominio al que conectarse no podrán probar nada.
Los parámetros de configuración los toma desde instalacion\login.php:

...
'form' => array(
	'activo'     => true,
	'clase'      => 'modelo\\autenticacion\\auth_ldap',
	'parametros' => array(
	'server' => ['DC01.UNLM.EDU.AR', 'DC02.UNLM.EDU.AR', 'DC03.UNLM.EDU.AR', ...],
	'user'   => 'usuario_admin',
	'pwd'    => 'password_admin',
	'domain' => 'UNLM.EDU.AR',
	'security' => 'SSL', // 'SSL', 'TSL', false
	'port'     => 636, // 636, 389
	'base_dn'  => 'DC=UNLM,DC=EDU,DC=AR'
    )
...

Y se utiliza la clase adLDAP que pueden descargar desde http://adldap.sourceforge.net/

Cualquier tip será bien aceptado :smiley:


auth_ldap.php.txt (4.17 KB)

fuente_usuarios_guarani.php.txt (5.25 KB)