Autentificación con LDAP

Buenos días,
Estamos trabajando con toba 2.3 y queremos realizar nuestra autentificación mediante LDAP.
Por lo visto, vi que toba tiene incorporada una clase de autentificación con LDAP, pero no encontré ninguna documentación al respecto.
Me gustaría saber como configurar el LDAP y además saber como relacionar los usuarios de LDAP con los del Toba por el tema de los permisos que debe tener cada usuario.
Desde ya, muchas gracias!

Hola. Es verdad, quedo bastante escondido.

Primero, si no lo tenes, hay que agregar este archivo en la carpeta instalacion/ldap.ini
http://toba.siu.edu.ar/trac/toba/browser/trunk_versiones/2.3/php/modelo/var/ldap.ini
Descomentarlo y agregar las configuraciones necesarias. El “dn” es el path a seguir en el arbol ldap para encontrarse con el listado de usuario

Luego hay que editar el archivo instalacion/instalacion.ini y agregar o modificar la siguiente linea

autenticacion = ldap

Finalmente hay que asegurarse tener la operación de login actualizada. Si el proyecto se creó en la version 2.3 de toba, ya esta actualizado, sino ejecutar:

toba proyecto actualizar_login -p PROYECTO

Esto va a generar una nueva operación de login (que lee estas configuraciones) y dejara la anterior intacta, por si tiene modificaciones que quieras portar a la nueva operación de login. Esto es así porque la operación del login es propia del proyecto, no es de toba

Realicé los pasos mecionados, y tras algunas modificaciones de la clase de ldap funcionó correctamente. Muchas gracias Sebastián!

Genial! Podrias compartir las modificaciones? Asi lo podemos agregar como parámetros en futuras versiones

Sí, por supuesto!
Lo primero fue corregir el constructor porque no levantaba bien el ldap.ini, estaba “basicos” por “basicas”. También los valores de los parámetros al no estar con " " tenía problemas con el parseo.
Fuera de esas dos cosas, en nuestro caso lo que agregué fueron los siguientes parámetros en el ldap.ini:

[basicas]
servidor = "******"
bind_dn = "*****"
bind_pass = "*****"
dn = "*****"
filter = "(mail=%s)"

Y en correspondencia agregué los siguientes atributos a la clase toba_autentificacion_ldap (con sus correspondientes seteos en el constructor):

protected $server;
protected $dn;
protected $bind_dn;
protected $bind_pass;
protected $filter;

Y en la función autentificar se hicieron los siguientes cambios:

$bind = @ldap_bind($conexion, $this->bind_dn, $this->bind_pass);

Esto es básicamente porque para poder conectarse al LDAP se necesita un usuario y contraseña

$res_id = @ldap_search($conexion, $this->dn, sprintf($this->filter, $id_usuario));

Y por último, dejé un filter parametrizable en el ldap.ini, en nuestro caso valida contra el atributo mail

Les comento que aún así, estamos buscando una solución para el login único, ya que seguimos agregando nuevas aplicaciones en toba, y los usuarios tienen que acceder a muchas URLs distintas y loguearse varias veces. Algo que venimos pensando es una integración con CAS. Pero bueno, próximamente armaremos un post con estas dudas más especificas.
Saludos!

Hola Pablo, disculpa la curiosidad en que consite lo del LDAP ?

Saludos y gracias

Qué tal? Mirá LDAP es una estructura en árbol para guardar información de diverso tipo. Se usa generalmente para guardar información de usuarios. De modo que se podría pensar como una base de datos que contiene información de nombres de usuario, contraseñas y permisos. Y la gracia del LDAP es que diferentes aplicaciones consultan al mismo, entonces lo que logras es que el usuario final solo tenga que recordar un solo par usuario/contraseña para poder ingresar a distintos sistemas. Saludos!

Pero sobre el acceso a los diferentes sistemas, deben estar desarrollados en el framework de toba ?

Me confusión es porque toba_usuarios, hace este proceso, de acceder a diferentes proyectos con el mismo login.

Gracias.

Pasa que por como venimos manejando nuestras puestas en producción, por diferentes razones, tenemos una base Toba por cada proyecto. De modo, que para cada proyecto está replicado el usuario.
El LDAP funciona completamente independiente del Toba, es más lo utilizamos para otros sistemas que no están hechos con Toba.
La idea es que en vez de que Toba autentifique con la contraseña que tiene guardada en su base, lo haga con algo que está afuera, que es el LDAP.

Pablo, mil gracias por tu tiempo, creo que inicio el proceso de investigación, para implementarlo en mi empresa.

Buen día

De nada! No dudes en consultarme si tenes alguna duda, veo como te puedo darte una mano, saludos!

Hola Pablo!

Te estás logueando con la operación de loguin de toba ??
Porque no puedo hacerlo, cambié los parametros que mencionas pero no llama a toba_autenticacion_ldap.php, entra por la autenticacion de toba…

Gracias
Oscar

Esto sucede porque levanta el instalacion.ini y lo guarda en sesión de modo que por más que lo modifiques te sigue cargando autenticación toba. Fijate de volver a iniciar sesión o directamente borra la variable con un:
unset($_SESSION[TOBA_DIR][‘instalacion’]);

Saludos!

Pablo gracias por la respuesta pero no me dio resultado.

Agregué mensajes en los metodos de la clase toba_autenticacion_ldap.php y noté que si bien corre el __construct, cuando invoca el método autenticar, ejecuta otro método, el de la clase de toba_autenticacion_basica supongo…??

Por otro lado me gustaría saber:

  • Si para loguear con ldap usaste la extensión del nucleo y extendiste la clase contexto de ejecución?.
    • Probasete el la renovación de contraseñas vencidas ?

Bueno por ahora eso, si me podés contestar me orientaría mucho!!

Gracias
Oscar

Oscar, tiene que arrancar. Vamos por partes:

  1. Modificar el instalacion.ini y poner autenticación ldap
  2. Agregar un unset($_SESSION[TOBA_DIR][‘instalacion’]);. Esto yo lo suelo poner en $toba_dir/php/nucleo/lib/toba_manejador_sesiones.php al comienzo de la función get_autenticacion
  3. En este punto si no te está funcionando te recomiendo fuertemente que hagas un debbugeo. La clase que tendrías que estar siguiendo especificamente para ver si funciona el logueo es la que menciono arriba toba_manejador_sesiones. Deberías arrancar a debuggear por la función login y ver si efectivamente toba::instalacion()->get_tipo_autenticacion() está dando ldap.
  4. Si esto va bien, debería estar entrando al autenticar de toba_autenticacion_ldap. Ahí ya podrías ir viendo si se conecta bien al ldap y hace la autenticación correctamente.

Saludos!

PD: no usé la extensión del núcleo para la autenticación y tampoco hice uso del tema de contraseñas vencidas (aunque con el tema del ldap asumo que esto va ir por cuenta del que gestione el ldap)

Buenas gente,

Pablo, no termino de entender para que haria un unset de dicha variable?.. la idea es que eso se cachea al momento de loguearse para no tener que ir a buscarlo en cada pedido de pagina. Si no hay modificacion del tipo de autenticacion mientras estas en una sesion abierta… no deberia haber necesidad de que vuelva a leerse, al menos hasta el proximo inicio de sesion.

PD: no usé la extensión del núcleo para la autenticación y tampoco hice uso del tema de contraseñas vencidas (aunque con el tema del ldap asumo que esto va ir por cuenta del que gestione el ldap)

Como bien decis, la parte de la contraseña vencida no la manejaria toba… sino LDAP, por ello la funcion que retorna si la clave esta vencida siempre devuelve false en dicha clase.

@Oscar:

No tengo muy claro que version de toba estas usando para esto… pero de ser un proyecto que venis migrando desde una version de hace un par de años… probablemente tengas que regenerar el item de login (con el comando toba proyecto actualizar_login) ya que se ha ido modificando a medida que agregamos distintos metodos de autenticacion.

Tambien deberias tener un archivo ldap.ini dentro de la carpeta instalacion con todas las configuraciones necesarias.
Como el seteo del metodo de autenticacion se hace a nivel de instalacion, el mismo vale para cualquiera de los proyectos, incluido toba_editor… por si queres probarlo en otro distinto.

La modificacion del contexto de ejecucion, se hace en gral cuando necesitas que un proyecto especifico se loguee con LDAP… pero todo el resto de la instalacion siga funcionando con la autenticacion comun… bien puede ser el caso del entorno de desarrollo, sin embargo para produccion deberia valer el otro metodo, siempre es mas facil cambiar un archivo ini que reemplazar codigo ante la modificacion de algun parametro.

Estaba charlando con Seba recien sobre este hilo, parece que tuviera sentido hacer que toba_editor se loguee usando siempre el metodo basico, de forma que el seteo en instalacion.ini no lo afecte, ya que no se si tiene sentido usar OpenId por ejemplo para entrar al editor. Parece una buena modificacion para la proxima version esa.

Saludos

Richard, mirá el unset lo hago cuando cambio la autenticación por algún motivo, para hacer alguna prueba o algo. El problema es que cuando lo cambiaba, no me daba pelota, ni aunque me desloguease y borrara las cookies. Por eso, directamente hacía el unset.
Por otro lado, el tema del logueo diferenciado está bueno, aunque no estaría bueno que en un ambiente de desarrollo ni siquiera te tengas que loguear? Sé que estaba ese “validación debug” pero nunca me funcionó :frowning:

Hola Pablo,

me imagine que venia por ese lado… pero con eliminar la cookie deberia cambiar el metodo de autenticacion para el proximo pedido de login, el cual deberia ser efectivamente el proximo pedido de pagina.

Por otro lado, el tema del logueo diferenciado está bueno, aunque no estaría bueno que en un ambiente de desarrollo ni siquiera te tengas que loguear? Sé que estaba ese "validación debug" pero nunca me funcionó :(

No necesariamente, toba_editor sigue siendo un proyecto de toba y como tal podria (y se que en algun caso esta asi) dejarse instalado en un servidor de produccion… te imaginas si cualquiera pudiera acceder a un editor de codigo remoto sin loguearse?.. seria el sueño del script kiddie mas elemental. Lo mismo vale para una maquina de desarrollo en una intranet, si alguien pudiera bypassear el firewall (cosa no tan loca)… te gustaria tener un flaco editando y ejecutando archivos de manera remota en tu maquina?, probablemente no :D.

Lo de validacion_debug… esta justamente para que no sea necesario introducir un usuario/pwd manualmente, es simplemente un shortcut… toba aun hace autenticacion, solamente que usas otro metodo para cargar los datos… algo similar a usar los recordatorios de claves del browser.

Estas fijando el valor de esa ‘constante’ en el punto de acceso?

Saludos

Buenas tardes, me sumo a este tema ya que logre instalar el ldap y tb el ldap account manager.

Tengo dudas respecto a la configuracion del archivo ldap.ini ya que probe con varias opciones y no puedo ingresar al toba_editor. Ya me quedo claro que tanto el toba_usuario como en ldap tienen que estar definidos los usuarios. Ahora bien, especificamente en el ldap.ini.
Pongo los datos ya que son de prueba:
[basicos]
servidor = “ip”
dn = “cn=admin,dc=uner,dc=edu,dc=ar” o es solo dc=uner,dc=edu,dc=ar
bind_dn = “admin@uner.edu.ar” es el usuario con el que se instalo el ldap??
bind_pass = “Admin123”
filter = “uid=%” este campos hace referencia a un “ou” del arbol del ldap?

Agradezco cualquier ayuda al respecto.
Saludos

Hola Carolina,

no estoy super empapado del tema LDAP… pero por ahi te puedo orientar un poco:


[basicos]
servidor = "ip"
dn = "dc=uner,dc=edu,dc=ar"                                                  //Esta seria la raiz desde la que se va a hacer la busqueda
bind_dn = "cn=admin,dc=uner,dc=edu,dc=ar"                     //Con esto te logueas al LDAP                   
bind_pass = "Admin123"
filter = "uid=%"                                                                            //Esto se va a reemplazar con el id de usuario especificado al momento de realizar la busqueda

No se si te ayude o te confundi mas… acordate igual que tenes el codigo fuente en toba_autenticacion_ldap.php, por si acaso queres ver como se usan los parametros.

Saludos