Pablo Morales's Blog Desarrollo web, Zend Framework, SEO, y otras yerbas
  • Home
  • About
  • Contacto
  • Posts
  • Comments

Autenticacion mas compleja con Zend_Auth

Published: February 4, 2009Posted in: Zend FrameworkTags: login, Zend Framework, Zend_Auth
  • Comments [5]
  • compartir en digg
  • compartir en facebook
  • compartir en twitter
  • compartir en delicious
Autenticacion mas compleja con Zend_Auth
Share

En los casos comunes de autenticaciones con Zend_Auth nosotros le pasamos un usuario y una clave, pero hay veces que necesitamos que valide por mas datos.

Una autenticacion comun seria la siguiente.

  1.  
  2.  Zend_Loader::loadClass( ‘Zend_Auth_Adapter_DbTable’ );
  3.  $dbAdapter = Zend_Registry::get( ‘dbAdapter’ );
  4.  $authAdapter = new Zend_Auth_Adapter_DbTable( $dbAdapter );
  5.  $authAdapter->setTableName( ‘SYS_USER’ );
  6.  $authAdapter->setIdentityColumn( ‘username’ );
  7.  $authAdapter->setCredentialColumn( ‘password’ );
  8.  $authAdapter->setIdentity( strtolower( trim( $username )) );
  9.  $authAdapter->setCredential( md5( $passwd ));
  10.  $auth = Zend_Auth::getInstance();
  11.  $result = $auth->authenticate( $authAdapter );
  12.  

Pero que pasa si ademas necesitamos validar si el usuario esta o no activo en el sistema, o si no esta suspendido temporalmente?

Nososotros podemos pasarle un parametro extra a Zend_Auth_Adapter_DbTable, para que filtre por mas datos.

Por ejemplo el caso anterior, quedaria de la siguiente manera si ademas nosotros queremos saber si el campo status = ‘A’

  1.  
  2.  Zend_Loader::loadClass( ‘Zend_Auth_Adapter_DbTable’ );
  3.  $dbAdapter = Zend_Registry::get( ‘dbAdapter’ );
  4.  $authAdapter = new Zend_Auth_Adapter_DbTable( $dbAdapter, ‘SYS_USER’, ‘username’, ‘password’, "MD5( ? ) AND status = ‘A’ " );
  5.  $authAdapter->setIdentity( strtolower( trim( $username )) );
  6.  $authAdapter->setCredential( md5( $passwd ));
  7.  $auth = Zend_Auth::getInstance();
  8.  $result = $auth->authenticate( $authAdapter );
  9.  

De esta forma, cada vez que intentemos loguearnos nos va a encriptar la clave con la funcion MD5, y preguntar si status =’A’.

Si ustedes no necesitan encriptar la clave pueden usar directamente el signo de pregunta sin la funcion MD5, tambien pueden agregar mas funcionalidades, para mas detalle mirar la documentacion oficial

En el administrador del blogzf tenemos un ejemplo de implementacion de este sistema.

  • Comments [5]
  • compartir en digg
  • compartir en facebook
  • compartir en twitter
  • compartir en delicious

5 Comments

  1. exos
    Posted February 17, 2009 at 12:11 PM

    Todo muy lindo, pero sigo pensando que:

    md5( $passwd )

    hoy por hoy es casi lo mismo que guardar la pass en texto plano, y que con un DB de 30GB tenes todas las combinaciones posibles de MD5 (y aunque tarde hasta dias), es como vulnerable, mas alla de que la mayoria de los usuarios pone passwords pelotudas como “sombrilla”, y la sacan con diccionarios.

    Lo mejor para mi es tener una key, (en php podes trabajar en bluefish) y encriptar asi :-) .

    private $int_key = ‘$2a$Dbf·21.311#i’;

    private function keyFrom (&$dato) {
    return crypt($dato,$this->int_key);
    }

    public function firma (&$dato) {
    return sha1($this->keyFrom($dato));
    }

    Asi obtenes un sha1 de una key generada de la contraseña y otra key bluefish.

    ¿¿¿¿¿paranoico yo?????

  2. Pablo Morales
    Posted February 23, 2009 at 11:04 PM

    En otro articulo tambien uso passphrase, y hablo de lo que mencionas, es real que el md5 se esta volviendo obsoleto y ni un passphrase lo vuelve seguro. En los sistemas que trabajo actualemente uso crypt con el que obtengo claves realmente seguras.

  3. Isra
    Posted March 26, 2009 at 5:45 AM

    Bueno, está claro que blowfish es una buena alternativa al cracking por fuerza bruta, pero un doble md5 es rápido, sencillo y seguro.

  4. Pablo Morales
    Posted March 26, 2009 at 8:31 AM

    Creo que a este nivel la optimizacion no es un problema, estamos hablando de una operacion que solo se usa en el registro y en el login. Mucho mas que google account no te va a tardar. Tengo que hacerme tiempo y postear lo que uso en mis sistemas

Trackbacks / Pings

  1. Bitacoras.com

Leave a Reply




XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Cancel Reply

Subscribe without commenting

  • Recent Posts
    • Instalando PHP 5.2.x en Ubuntu Lucid.
    • Resumen de lo aprendido con Amazon Ec2
    • 2 tips para aumentar la velocidad de tus sitios
    • Dos proyectos en Zend Framework en un mismo dominio.
    • Upload de archivos con Zend Form.
    • Escalando con Zend Server.
    • Video Tutorial HTML 5
    • Chuleta o Ayuda memoria para iniciarse con Zend Framework
    • Escalando nuestras web – Capitulo 2 “Migracion de meneame a Amazon”.
    • Transacciones Mysql con Zend Framework.
  • Recent Posts
    amazon ec2 Array best practices blog con zf blogzf bootstrap cache camelCase CAME_CASE code complete consola desarrollo django dojo eventos iphone linux Oracle paradigmas php php5 portal Programacion proyecto zend framework python quickstart SEO sitemap stallman symfony vi vim web & beer windows Zend Zend Framework Zend Framework Zend Server Zend Studio Zend_Auth Zend_Cache Zend_Config Zend_Db Zend_Dojo Zend_Form
  • Followme en twitter
  • Search movies

    Donde Jugar Paintball

    Blog de Paintball