Login: Sesión, Usuario y Autenticacion
Durante el proceso de ingreso al sistema por parte de un usuario existen tres ventanas de extensiones, la sesión, el usuario y la operación de login.
Sesión
La sesión es el marco de tiempo desde que las credenciales del usuario son aceptadas (login) hasta que el mismo decide salir del sistema (logout) o caduca el tiempo máximo de espera (parámetro de configuración del proyecto o configuración de php, la que antes suceda). El proyecto puede definir en su configuración general, una clase propia de sesión con las siguientes ventanas:
- Inicio de la sesión (
conf__inicio
). - Activación de la sesión (
conf__activacion
). Atrapa la activación de la sesión en cada pedido de página (similar atoba::contexto_ejecucion()->conf__inicial
pero se ejecuta sólo cuando el usuario está logueado) - Fin de la sesión (
conf__final
)
Ver la documentación de la interface
Usuario
El control de todo el mecanismo de acceso a una operación de un proyecto está a cargo del núcleo de toba. Durante esta ejecución siempre existe el concepto de usuario. Posee un ID único que es el que se almacena en los [referencia/Seguridad logs y auditoria]. Existe un ID no_autentificado reservado para el caso del usuario que aún no inicio sesión (no presentó aún sus credenciales)
El usuario posee una clase donde se brindan ciertos servicios (get_nombre, get_id, etc.) y se ofrecen algunos comandos (autentificar, bloquear, etc.). Por defecto se utiliza la clase toba_usuario_basico que lee/escribe la información asociada al usuario en una tabla de metadatos de toba llamada apex_usuario
El proyecto puede definir en su configuración general, una clase propia para el usuario, respetando la interface toba_interface_usuario. Si se modifica radicalmente el comportamiento de esta clase (por ejemplo se almacena el usuario en una tabla propia del proyecto) no sólo va a ser necesario re-implementar todos los métodos, sino que no va a ser posible utilizar el ABM de usuarios del proyecto toba_usuarios, ni las acciones que brindan los comandos de consola (exportar, importar, cambiar claves, etc.).
Operación de Login
Esta operación es la que permite a un usuario presentar sus credenciales e ingresar al sistema. Como muchos sistemas muchas veces necesitaban un look & feel distinto o aumentar la cantidad de información requerida por el usuario, se optó por que sea una operación más del proyecto. Algunas cosas tener en cuenta:
La línea clave de esta operación es cuando envia las credenciales al núcleo. Tiene esta forma:
try { toba::manejador_sesiones()->login($id_usuario, $clave); } catch ( toba_error_autenticacion $e ) { toba::notificacion()->agregar( $e->getMessage() ); }
En la operación estándar se lee un parámetro de configuración que permite que el usuario pueda ingresar al sistema sin usar contraseña (llamado a veces autologin). Este parámetro está en la configuración general del proyecto opción Autentificación debug. Opcionalmente se puede marcar con una constante en el punto de acceso (archivo www/aplicacion.php), la constante es
define("apex_pa_validacion_debug", 1);
En caso de querer volver a usar la operación estándar de toba o actualizarla a su última versioń ejecutar en la consola toba proyecto actualizar_login
Autenticacion
A partir de toba 2.2
existe una configuracion en instalacion.ini que
permite configurar la forma de autenticacion de la instalacion:
toba: es la configuración por defecto, se pide usuario y contraseña y se auntentica usando la clase
toba_usuario
(o su extensión si esta definida)ldap: se utilizan las configuraciones del archivo
instalacion/ldap.ini
, internamente se utiliza la clasetoba_autenticacion_ldap.php
openid: se utilizan las configuraciones del archivo
instalacion/openid.ini
, internamente se utiliza la clasetoba_autenticacion_openid.php
saml: se utilizan las configuraciones del archivo
instalacion/saml.ini
, internamente se utiliza la clasetoba_autenticacion_saml.php
Luego de cambiar el valor de esta directiva es necesario reiniciar el navegador para limpiar la sesión. También es posible cambiar el metodo de autenticacion durante la ejecución. Por ejemplo
class contexto_ejecucion implements toba_interface_contexto_ejecucion
{
function conf__inicial()
{
//Autenticacion personalizada
$autenticacion = new toba_autenticacion_ldap('ldap-test.siu.edu.ar', "dc=ldap,dc=siu,dc=edu,dc=ar");
toba::manejador_sesiones()->set_autenticacion($autenticacion);
}
function conf__final()
{
}
}