Note

The online documentation is produced by a web publishing technology created by us to read the documents origins in OpenOffice Writer (ODT) and Microsoft Word (docx) formats and produces native web and PDF versions. In this way we maintain Louder project documentation update and in sync on each of its formats.
Select a Language:
Componente Auth
Introducción
El componente Auth esta diseñado para permitir la autenticación y administración de la entidad de los usuarios en una aplicación ya sea de forma independiente ó de manera compartida.

Este componente accede a sus adaptadores usando el patrón Virtual Proxy, es decir, una instancia de Auth solo actúa como un Proxy al objeto real instanciado que corresponde al tipo de adaptador utilizado por el mismo. Esta implementación permite crear un punto de entrada único par la utilización de adaptadores del framework ó de usuario.

La instancia interna del adaptador se puede obtener usando el método Auth::getAdapterInstance().
Adaptadores de Auth
El componente implementa una arquitectura de adaptadores de autenticación, estos establecen interfaces consistentes a diferentes proveedores de identificación bajo una misma interfaz de aplicación. Cada adaptador requiere de diferentes parámetros solicitados por el servicio de autenticación utilizado.

Los adaptadores disponibles son:
Tabla: Adaptadores de Auth disponibles
Adaptador
Descripción
DigestPermite la autenticación usando un realm basado en un archivo plano de texto.
RadiusImplementa autenticación usando protocolo Radius Autentication RFC-2865.
Kerberos VAutentica usando servidores Kerberos 5 y además permite obtener las politicas asociadas al usuario identidad.
ModelUsa un modelo de la aplicación en donde los atributos de esta actuan como credenciales en la autenticación.
LDAPPermite utilizar servidores LDAP como ActiveDirectory para autenticarse en una aplicación.


Todos los adaptadores de Auth implementan la interface AuthInterface:
interface AuthInterface {

     public function __construct($auth, $extraArgs);
     public function getIdentity();
     public function authenticate();

}
Administración de Identidad
La administración de identidad es uno de los procesos más usuales en cualquier aplicación Web, una vez se produce la autenticación e identificación del usuario es necesario conocer la identidad durante toda la sesión del mismo en la aplicación.

Al realizar una autenticación satisfactoria con el componente Auth automáticamente se crea un registro de la identidad de quien inició sesión y poder cumplir con objetivos de la aplicación como personalización ó confidencialidad.

El método estático de Auth llamado getActiveIdentity() devuelve la identidad creada en la autenticación en cualquier parte de la aplicación. Para destruir la identidad activa se usa el también método estático destroyIdentity().

Para conocer si existe una identidad valida en la aplicación se usa el método Auth::isValid() que devuelve un valor boleano correspondiente a esa información.
Expiración de Sesión
El componente Auth soporta expiración de la sesión con lo que es posible controlar que un usuario autenticado solamente pueda utilizar la aplicación durante un determinado rango de tiempo.

En estos casos se debe establecer el tiempo en segundos que debe durar la sesión mediante el método del objeto Auth llamado setExpireTime después de la autenticación del usuario.
Control de Autenticación concurrente
Las reglas del negocio en una aplicación podrían contemplar que un usuario este autenticado en una aplicación solamente desde una terminal de trabajo. En otros casos cuando se genere una autenticación del usuario desde otra maquina se requiera que se cierre ó se invaliden las sesiones abiertas en otras terminales.
Autenticación con Modelos
El adaptador Model permite realizar la autenticación mediante un realm en una entidad del gestor relacional por defecto en config/environment.ini. La principal ventaja de este adaptador es que aprovecha las capacidades para atender múltiples peticiones concurrentes de autenticaciónn que pueda tener el gestor relacional.

El siguiente ejemplo ilustra como realizar una autenticación através usando este adaptador:
Ejemplo: Uso del componente Auth con modelos
<?php

class LoginController extends ApplicationController {

     public function indexAction(){

     }

     public function authSessionAction(){
          $login = $this->getPostParam("login");
          $password = sha1($this->getPostParam("password"));
          $auth = new Auth('model', "class: Usuarios", "login: $login", "password: $password");
          if($auth->authenticate()==false){
               Flash::error("Usuario/clave incorrectos");
               $this->routeTo("action: index");
          } else {
               $this->routeTo("controller: menu");
          }
          $this->setRequest("password", "");
     }

}


Tabla: Parámetros que requiere el adaptador Auth con modelos
Nombre
Descripción
classNombre de la clase del modelo que servira como realm.


Los campos que conforman la clave de identidad deben ser pasados como parámetros con su respectivo valor.

La identidad se construye apartir de los atributos de la entidad exceptuando los campos de password ó contraseña.
Autenticación con KerberosV
Este adaptador permite autenticarse usando servidores administrativos Kerberos 5 así como obtener las politicas asociadas a los usuarios autenticados.

Puede obtener más información sobre servidores Kerberos en http://web.mit.edu/kerberos/www/krb5-1.2/krb5-1.2.8/doc/admin_toc.html.

El siguiente ejemplo ilustra como realizar una autenticación através usando este adaptador:
Ejemplo: Uso del componente Auth con un servidor KerberosV
<?php

class LoginController extends ApplicationController {

     public function startSessionAction(){
          $login = $this->getPostParam("login");
          $password = $this->getPostParam("password");
          $auth = new Auth('kerberos5', 
"realm: GONICUS.LOCAL", 
"username: admin/admin", 
"password: 12345");
          if($auth->authenticate()==true){
               $identity = $auth->getIdentity();
               $policies = $auth->getPolicies();
               Flash::success("Bienvenido {$identity['username']}");
               foreach($policies as $policy){
                    Flash::notice($policy);
               }
          } else {
               Flash::error("Fallo autenticacion. Credenciales invalidas");
          }
     }

}

Tabla: Parámetros que requiere el adaptador Auth con KerberosV
Nombre
Descripción
serverEs el nombre de dominio ó dirección IP del servidor Kerberos V. Este parámetro es obligatorio.
realmEl nombre de la base de datos con la politica de autenticación en el servidor K5.
principalUna combinación usuario/grupo con el que se hará la autenticación
passwordContraseña del usuario usado en principal.


La identidad devuelta está consta de los campos realm y username.

Advertencia: El uso de este adaptador requiere que este presente la extensión de PHP llamada php_kadm5.
Autenticación con Radius
Este adaptador permite la autenticación mediante protocolo Radius (RFC2865 - http://www.faqs.org/rfcs/rfc2865). Este adaptador requiere de la extensión php_radius que se encuentra disponible en plataformas Unix (FreeBSD, Linux) y Windows.

El siguiente ejemplo ilustra como realizar una autenticación através usando este adaptador:
Ejemplo: Uso del componente Auth con un servidor Radius
<?php

class LoginController extends ApplicationController {

     public function startSessionAction(){
          $login = $this->getPostParam("login");
          $password = $this->getPostParam("password");
          $auth = new Auth('radius',
               "server: 172.16.2.10",
               "port: 1821",
               "secret: a1b2c3d4",
               "username: tierry",
               "password: henry"
          );
          if($auth->authenticate()==true){
               $identity = $auth->getIdentity();               
               Flash::success("Bienvenido {$identity['username']}");               
          } else {
               Flash::error("Fallo autenticacion. Credenciales invalidas");
          }
     }

}
Tabla: Parámetros que requiere el adaptador Auth con Radius
Nombre
Descripción
serverEs el nombre de dominio ó dirección IP del servidor Radius V. Este parámetro es obligatorio.
portPuerto UDP donde escucha el servicio Radius. Si el puerto es 0 el adaptador localiza el servicio mediante el archivo /etc/services y como última opción el puerto estándar 1812.
secretLa clave compartida que se pasará al servidor Radius.
timeoutNúmero de segundos que el adaptador espera por obtener respuesta del servidor.
max_retriesNúmero de intentos que realiza para tratar de autenticarse.
usernameNombre de usuario a autenticar.
passwordPassword el usuario a autenticar.


La identidad se construye con el campo username.
Autenticación con Digest
El adaptador de autenticación Digest permite utilizar archivos planos de texto como realms para la comprobación de identidad de los usuarios de una aplicación. Un archivo Digest tiene la siguiente estructura:
nombreusuario:nombrerealm:resumenpassword
otronombreusuario:nombrerealm:otroresumenpassword

Cada línea del archivo constituye una identidad. Los campos de la identidad están separados por ":" (dos puntos). El primer campo es el nombre del usuario, este puede tener la forma john.smith. El segundo campo es el realm al que pertenece el usuario, un archivo digest puede tener varios realms en él. Por último el tercer campo es un resúmen criptográfico correspondiente al password del usuario. El algoritmo estándar de una sola vía utilizado es MD5 pero es posible utilizar otro mediante la opción de configuración algorithm. Para un archivo digest como el siguiente:
john.smith:Production:5ebe2294ecd0e0f08eab7690d2a6ee69

El siguiente proceso de autenticación es satisfactorio:
Ejemplo: Autenticación usando el adaptador Digest
<?php

class LoginController extends ApplicationController {

     public function startSessionAction(){
          $auth = new Auth('digest',
               "filename: auth/passwd.txt",
               "username: john.smith",
               "password: secret",
               "realm: Production"
          );
          if($auth->authenticate()==true){
               $identity = $auth->getIdentity();
               Flash::success("Bienvenido {$identity['username']}");
          } else {
               Flash::error("Falló autenticación. Credenciales invalidas");
          }
     }
     
}
Ejemplo: Autenticación usando un archivo con otro charset diferente al de entrada
<?php

class LoginController extends ApplicationController {

     public function startSessionAction(){
          $auth = new Auth('digest',
               "filename: auth/passwd.txt",
               "username: お読みください",
               "password: secret",
               "realm: フォルダに入れてください",
               "charset: EUC-JP"
          );
          if($auth->authenticate()==true){
               $identity = $auth->getIdentity();
               Flash::success("Bienvenido {$identity['username']}");
          } else {
               Flash::error("Falló autenticación. Credenciales invalidas");
          }
     }
     
}
Tabla: Parámetros que requiere el adaptador Auth con Digest
Nombre
Descripción
filenameRuta al archivo digest. El archivo debe ser de texto, si está disponible la extensión de PHP Multibyte Strings su codificación puede ser cualquiera que soporte ésta.
usernameNombre del usuario a autenticar
passwordPassword plano del usuario
realmRealm al que pertenece el usuario a autenticar
algorithmCallback del algoritmo que se utilizará para comparar el password del usuario con los del archivo digest. Por defecto es MD5.
charsetCodificación que tiene el archivo de identidades digest. El valor por defecto es UTF-8.


La identidad se construye a partir de los campos username y realm del usuario encontrado.
Autenticación con LDAP
El protocolo LDAP "Lightweight Directory Access Protocol" es utilizado para acceder a servidores de directorios. Estos son estructuras que almacenan datos en una jerarquia de arbol.

El adaptador de autenticación LDAP soporta autenticación con servidores de directorios como Microsoft Active Directory, OpenLDAP, Sun OpenDS ó Mac OS X Server LDAP Service.

La notación DN ó "Distinguished Name" representan rutas a objetos alojados en un servidor LDAP. Cada atributo esta indicado con su nombre estandar, un igual y su valor. Los atributos están separados por comas y el orden de lectura de los atributos se realiza de derecha a izquierda.

En el siguiente ejemplo se ilustra la autenticación a un servidor LDAP a partir de los parámetros de un formulario:
Ejemplo: Uso del componente Auth con un servidor LDAP
<?php

class LoginController extends ApplicationController {

     public function startSessionAction(){
          $login = $this->getPostParam("login");
          $password = $this->getPostParam("password");
          $auth = new Auth('ldap', "server: server.local",
               "accountDomainName: example.com",
               "baseDN: dc=example,dc=com",
               "username: uid=$login,dc=example,dc=com",
               "password: $password",
               "identityAttributes: cn,uid",
               "port: 1389"
          );
          if($auth->authenticate()==true){
               $identity = $auth->getIdentity();
               Flash::success("Bienvenido {$identity['username']}");
          } else {
               Flash::error("Falló autenticación. Credenciales invalidas");
          }
     }

}

Los siguientes parámetros deben ser indicados para realizar una autenticación satisfactoria en un servidor LDAP:
Tabla: Parámetros que recibe el adaptador Auth con LDAP
Nombre
Descripción
serverEs el nombre de dominio ó dirección IP del servidor LDAP. Este parámetro es obligatorio.
accountDomainNameNombre del dominio al que pertenece la cuenta a autenticar.
usernameDN del usuario que se va a autenticar en el servidor. Este parámetro es obligatorio.
passwordContraseña del usuario que se va a autenticar. Si el parámetro no es indicado se produce un intento de autenticación anónimo.
baseDNDN base donde se hace la búsqueda de la identidad del usuario. Es el DN del servidor donde la cuenta se encuentra ubicada.
portPuerto del servidor donde escucha el LDAP Server.
identityAttributesAtributos de la entrada del servidor LDAP que serán usados para construir la identidad del usuario autenticado.
accountCanonicalFormIndica la forma en la que el nombre de usuario esta canonizado, dependiendo del tipo de servidor LDAP el adaptador traduce este nombre automáticamente al adecuado. Un valor de 2 indica la forma normal, 3 usa la forma \\SERVIDOR\usuario y la 4 usuario@servidor.


La identidad se construye apartir de los campos del registro del nombre canonico del usuario en el servidor LDAP.

Advertencia: El uso de este adaptador requiere que este presente la extensión de PHP llamada php_ldap.