Distinta autenticación dependiendo del punto de acceso

Buenas tardes,

En autogestión vamos a tener dos puntos de acceso con sus correspondientes personalizaciones, una para los alumnos Ingresantes y otro para los de Grado. El problema con el que nos encontramos es que los Ingresantes deberían autenticarse con el Form (auth_form) y los de Grado con LDAP (auth_ldap). El tema es que el archivo login.php separa por punto de acceso, como si lo hace el config.php. Hay alguna manera para hacer que la autenticación sea distinta dependiendo del punto de acceso?. Gracias!

Estamos usando la versión 3.15.1.

Agustín

Hola Agustín,

No, no se puede configurar por bloque de acceso. Lo que se puede hacer es personalizar por bloque de acceso, deberías personalizar la función prepare del archivo src/siu/operaciones/acceso/pagelet_login.php como sigue:


....
               $modelo = array();
		foreach ($lm->get_auth_providers() as $auth) {
			/** @var $auth AuthenticationProvider */
			$modelo[$auth->get_id()] = $auth->get_modelo();
		}
		unset($modelo['saml']); // <===> Quito SAML
		$this->data['providers'] = $modelo;
....

En este caso estoy quitando la autenticación vía SAML. Podes ir sacando tipos de autenticación por personalización.

saludos.

Hola Agustín, corrijo lo anterior, personalizando seria como sigue:

src/pers//operaciones/acceso/pagelet_login.php


<?php
namespace <NOMBRE-PERS>\operaciones\acceso;

use siu\operaciones\acceso\pagelet_login as pagelet_login_siu;

class pagelet_login extends pagelet_login_siu {

	function prepare() {
		
		parent::prepare();
		// Quito login vía SAML
		unset($this->data['providers']['saml']);
	}

}

saludos.

Gracias Leo. Bien simple. Igual estoy teniendo un problema. En el login.php la configuración de la autenticación siempre la teniamos con el nombre ‘form’. Ahora no puedo tener habilitado los dos con nombre ‘form’ ya que se pisan. Pero si le cambio el nombre no me trae los campos del formulario. Este es mi login.php:


/**
	 *  Clasico formulario de usuario y contraseña
	 */
	'form_clasico'   => array(
		'activo'     => true,
		'clase'      => 'modelo\\autenticacion\\auth_form',
		'parametros' => array(	)
	),

	'form_ldap'   => array(
	      'activo'     => true,
	      'clase'      => 'modelo\\autenticacion\\auth_ldap',
	      'parametros' => array(
		                    'server' => ...,
		                    'dn' => ...,
		                    'bind_dn' =>...,
		                    'bind_pass' => ...,
				     'filter' =>...
		                    )
   	),

Debe ser que en algún lugar lo va a buscar con el nombre ‘form’?

Hola Agustín,

Creo que es ldap, y no form_ldap. No le podes poner el nombre que vos quieras, form_clasico no te lo va a tomar, tiene que ser form.

Siempre guíate en el template instalacion/login_template.php.

La convención es que el nombre corresponda con el nombre de la clase:

  • form con “src/siu/modelo/autenticacion/auth_form.php”
  • saml con “src/siu/modelo/autenticacion/auth_saml.php”
  • ldap con “src/siu/modelo/autenticacion/auth_ldap.php”

saludos.

También lo probé de esa manera. Pero con ‘ldap’ no me funciona, no me trae los textbox para completar.

Leo, se te ocurre que puede ser? Si vos probas poniendo ‘ldap’, funciona?

Hola Agustin, te dejo un foro que te puede llegar a servir:

http://foro.comunidad.siu.edu.ar/index.php?topic=13023

saludos.

Lo mismo, en el hilo que me pasaste le ponen nombre ‘form’ a la configuracion de ldap, por eso funciona.

Buenas tardes,

Cuando puedan necesitamos que nos den una mano con este tema. En el config.php no estamos logrando hacer funcionar la configuración de ldap seteandole como id ‘ldap’. Solo podemos hacerlo ingresando como id ‘form’.

Gracias!

Agustin

Hola Agustin,

Si, por lo que veo hay que usar el id “form”, seria algo así en instalacion/login.php:


	'form' => array(
		'activo' => true,
		'clase' => 'modelo\\autenticacion\\auth_ldap',
		'parametros' => array(
			'server' => 'localhost/ldap', //Servidor LDAP
			'user' => 'admin', //Usuario
			'dn' => 'dc=siu,dc=edu', //DN
			'bind_dn' => 'cn=admin,dc=uni,dc=edu', //Usuario DN
			'bind_pass' => 'admin', //Password
			'filter' => 'uid=*' //Busqueda de usuarios.
		)
	),

Otra cosa a tener en cuenta es que debes tener instalada la extensión LDAP de PHP (sudo apt-get install php5.6-ldap), y luego reiniciar Apache.

Una vez hecho esto, ¿cual es el error que te esta dando? Lo podes buscar en los logs (carpeta instalacion/log).

saludos.

Ldap me funciona perfecto. Pero como te comentaba al principio, lo que necesitamos es que se use el login comun para un punto de acceso, grado, y login con ldap para el otro punto de acceso, posgrado. Vos me comentaste la soluciòn de tener configurado en el login.php ambos login, y luego personalizando en cada punto de acceso borro uno u otro.
El problema es que si dejo los dos con ‘id’=form , en el array del pagelet_login.php solo queda uno, ya que al tener el mismo nombre lo reemplaza. Me metì en la parte que se crean las session de login, pero son clases del framework de toba. Se te ocurre alguna otra manera?

Gracias por la respuesta.

Agustìn

Hola Agustin, tengo una posible solución:

Lo que podes hacer es que los ingresantes accedan al 3W por un bloque de acceso, y los de grado por otro. Eso lo podes hacer en el archivo instalacion/alias.conf:


Alias /3w/ingresantes "<PATH-3W>/src/siu/www"
Alias /3w/grado "<PATH-3W>/src/siu/www"

<Location /3w/ingresantes>
        SetEnv ACC_ID 3w_ingresantes
	SetEnvIf always_match ^ ACC_ALIAS=/3w/ingresantes
</Location>

<Location /3w/grado>
        SetEnv ACC_ID 3w_grado
	SetEnvIf always_match ^ ACC_ALIAS=/3w/grado
</Location>

Luego en el archivo instalacion/login.php definís los dos tipos de login (form y ldap):


	'form'   => array(
		'activo'     => true,
		'clase'      => 'modelo\\autenticacion\\auth_form',
		'parametros' => array(	)
	),
	
	'ldap' => array(
		'activo' => true,
		'clase' => 'modelo\\autenticacion\\auth_ldap',
		'parametros' => array(
			'server' => 'localhost/ldap', //Servidor LDAP
			'user' => 'admin', //Usuario
			'dn' => 'dc=siu,dc=edu', //DN
			'bind_dn' => 'cn=admin,dc=uni,dc=edu', //Usuario DN
			'bind_pass' => 'admin', //Password
			'filter' => 'uid=*' //Busqueda de usuarios.
		)
	),

Pero el truco viene ahora, en el archivo vendor/siu/chulupi-framework/src/SIU/Chulupi/acceso/LoginManager.php función __construct deberia quedar como sigue:


	function __construct()
	{
		$conf = kernel::proyecto()->get_login_config();
		$bloque_acceso = kernel::proyecto()->get_bloque_acceso();
		if ($bloque_acceso == '3w_grado') {
			unset($conf['form']);
			$conf['form'] = $conf['ldap'];
			unset($conf['ldap']);
		}
		
		$this->fuentes = new FuentesAutenticacion($conf);
	}

Este ultimo archivo esta dentro de vendor y no lo vas a poder subir al colab, pero si podes hacer un Script de Composer en el archivo src/siu/Install.php que haga dicha modificacion, y luego vas a poder subir dicho cambio.

NOTA: El archivo src/siu/Install.php no es personalizable, cuando actualicen de versión deberán replicar dicho cambio en la misma.

saludos.

Muchas gracias Leonel. Funcionó de 10.