Hace unos días anunciamos que soitu.es te daba la opción de autenticarte utilizando OpenID. En este artículo te contamos los pasos que hemos seguido para su implantación en nuestra Web. También te puede servir como guía si estás pensando en implantar OpenID en tu Web en un futuro.
Nuestro punto de partida es una Web [soitu.es] en producción con un sistema de registro y autenticación de usuarios ya existente. Los pasos a seguir serían prácticamente los mismos si se parte de un desarrollo desde cero, ya que implantar un sistema de autenticación OpenID no es muy intrusivo con el código existente. Por supuesto, esto dependerá de cómo esté desarrollada cada Web :).
El primer paso consiste en adaptar la base de datos de usuarios. Se parte de una tabla de usuarios en la que cada usuario cuenta con un identificador único (clave primaria). Es necesario crear una nueva tabla que asocie a cada usuario con sus posibles identificadores OpenID, creando una relación de uno a muchos entre la tabla de usuarios y esta nueva tabla. Su clave primaria será el identificador OpenID puesto que, obviamente, este identificador debe ser único, ya que no podrá haber dos usuarios que compartan identificador OpenID.
Actualmente existen multitud de librerías que dan soporte OpenID tanto de consumer (cliente) como de provider (servidor). Nuestra parte de gestión de usuarios está desarrollada en Perl, así pues, la elección lógica era el módulo Net::OpenID::Consumer disponible en el repositorio de CPAN (de momento, no entra en nuestros planes ofrecer servicios de proveedor OpenID).
A día de hoy, la versión estable de este módulo sólo soporta la especificación 1.1 de OpenID Authentication, lo cual limita el acceso a varios proveedores de OpenID. Entre ellos, se encuentra Yahoo, que ha pasado directamente a soportar la especificación 2.0, ignorando la versión 1.1.
Afortunadamente, el equipo que mantiene este módulo lleva tiempo desarrollando una nueva versión del mismo que sí soporta la especificación 2.0. Decidimos instalar esta versión -no sin algo de miedo ;)- y tras una serie de pruebas comprobamos que su funcionamiento era bastante correcto. No obstante, no deja de ser una versión beta, así que, si notáis cualquier error o funcionamiento extraño, os agradeceremos todos los comentarios que nos hagáis llegar.
Con el módulo ya instalado, necesitamos construir nuestra propia librería para implementar las siguientes acciones:
Una vez implementadas las acciones del punto anterior, es necesario desarrollar el CGI que interactuará con el navegador del usuario. El objetivo de este CGI es proporcionar un interfaz de autenticación OpenID de forma desacoplada de la autenticación tradicional, para evitar confundir a los usuarios. Realiza dos funciones:
Necesitamos adaptar tres páginas para implantar OpenID:
Ciertos proveedores de OpenID tratan de comprobar la legitimidad de la Web que les solicita la autenticación (en este caso, soitu.es) utilizando el protocolo Yadis. Mediante este protocolo comprueban los servicios de identificación que proporciona la Web origen para avisar al usuario sobre su legitimidad. En soitu.es tuvimos que modificar nuestros servidores Web para que insertaran en todas las peticiones la siguiente cabecera:
El contenido del fichero yadis.xrdf define los servicios de autenticación que proporciona la Web y las especificaciones que siguen:
Y... ¡eso es todo! Como ya comentamos anteriormente seguimos investigando temas como OAuth para el intercambio de datos con otras Webs, pero eso es otra guerra. Cada cosa a su tiempo.
Si quieres firmar tus comentarios puedes iniciar sesión »
En este espacio aparecerán los comentarios a los que hagas referencia. Por ejemplo, si escribes "comentario nº 3" en la caja de la izquierda, podrás ver el contenido de ese comentario aquí. Así te aseguras de que tu referencia es la correcta. No se permite código HTML en los comentarios.
Lo sentimos, no puedes comentar esta noticia si no eres un usuario registrado y has iniciado sesión.
Si ya lo estás registrado puedes iniciar sesión ahora.