Login con LightopenID

Cuando desarrollamos una web la mayoría de las veces sólo nos interesa saber si el usuario está logeado o no para poder escribir comentarios, votar… Desarrollar un sistema de identificación es muy crítico, debido al manejo de datos tan importantes como las contraseñas o emails.

¡Pues una solución genial es usar openID!

¿Qué es openID como usuario de una web? Pues digamos que tienes una cuenta de Gmail, pues te identificas en una web con esa cuenta y ya quedas identificado, evitando tener que registrarte mil veces para mil webs. Existen varios proveedores de openID, como Google, Yahoo!, Flickr… ¡y con ellos ya tienes una cuenta openID!

¿Qué es openID como servidor (web)? Una manera de evitar almacenar y gestionar información muy confidencial y crítica, y evitar al usuario la tediosa tarea de registro, usando para ella su cuenta openID.

¿Cómo implemento openID en mi web (servidor)? Hay múltiples librerías para distintos lenguajes que facilitan el uso de openID.
En mi caso voy a usar LightOpenID para PHP. Copiamos la librería openid.php en el directorio junto a los siguientes ficheros que crearemos en el mismo directorio:

login.php: Primer fichero para logearnos, mostrará los proveedores como un enlace, ponerlo guapo ya es tarea tuya ;)
`<?php
session_start();
if (isset($_SESSION[‘logueado’])) {
    echo “Logueado”;
}
else
{
    require_once ‘openid.php’;
    $openid_google = new LightOpenID(“https://tu_servidor.com");
    $openid_google->identity = ‘https://www.google.com/accounts/o8/id';
    $openid_google->returnUrl = ‘setID.php’;

    $openid_yahoo = new LightOpenID(“https://tu_servidor.com");
    $openid_yahoo->identity = ‘https://me.yahoo.com/';
    $openid_yahoo->returnUrl = ‘setID.php’;
}
?>
Entrar con cuenta de Google
Entrar con cuenta de Yahoo!`

El código en verde lo explicaré más adelante, lo que nos importa ahora es el naranja. Definimos cada proveedor de openID que queremos usar y creamos un enlace que al pulsarlo invocará una web externa con el proveedor, por ejemplo Google, que si damos el permiso llamará al fichero siguiente (especificado por $openid_google->returnUrl) en nuestro servidor.

setID.php: Es el fichero que recibe la respuesta del proveedor de openID (por ejemplo Google, Yahoo!, myOpenID…) tras login.php:
<?php session_start(); require_once 'openid.php'; $openid = new LightOpenID("https://tu_servidor.com");  if ($openid->mode) {     if ($openid->mode == 'cancel') {         echo "Cancelado";     } elseif($openid->validate()) {         $_SESSION['logueado'] = $openid->identity;         echo "logueado";     } else {         echo "No logueado";     } } else {     echo "No vienes desde login.php"; } ?>
Aquí comprobamos qué nos devolvió el proveedor de openID (por ejemplo Google) y devolvemos un resultado al cliente, sería ideal por ejemplo invocar la página principal automáticamente con una redirección PHP.

logout.php: Para desloguearnos creamos un fichero que contendrá lo siguiente:
<?php session_start(); session_destroy(); echo "No Logged"; ?>
No hay nada naranja :P Cierto, aquí ya no interviene openID.

Resumiendo, como veis usar openID con LightOpenID es relativamente sencillo. Pero atención, identificarnos genera un identificador que proviene del proveedor de openID ($openid->identity) y es una cadena única que nos identifica, ¡pero se pierde! tras salir de setID.php. ¿Cómo saber si estamos logueados en las siguientes páginas? Pues creamos una sesión PHP con la que sabremos si estamos logueados o no (y es el código que está en verde). En login.php no ejecutamos ningún código si ya estamos logueados, en setID.php establecemos la sesión PHP y en logout.php la destruimos.

Resumiendo: Un sistema standard, eficaz, limpio, poco intrusivo y claro para identificar usuarios :)

Se pueden obtener datos como el email o nombre de usuario en algunos casos (devueltos por el proveedor en formato JSON) y jamás podremos obtener la contraseña del usuario.

Podemos usar selectores con jQuery para hacer un formulario mucho más vistoso, como jQuery openID Simple.

Las URLs para más proveedores son:

Enlace con buena explicación: JAlvB.