El bonito single sign-on

La filosofía del single sign-on ha terminado imponiéndose por pura lógica de saturamiento 2.0, con los grandes jugadores vendiendo sus nuevas propuestas (OpenID lo intentó y no lo consiguió…) y los usuarios cansados de procesos de registro y contraseñas varias. Darles a éstos la oportunidad de usar sus credenciales de alguno de los servicios top para utilizar tu sitio debería ser ya a estas alturas planteado como una funcionalidad primaria de cualquier proyecto web.

Lo que viene a continuación es una guía para implementar en tu web la funcionalidad de “login externo” usando las APIs de tres de los grandes: Facebook, Yahoo y Windows Live (Google y OpenID vendrán en otro post). El proceso es similar en todos los casos, y el objetivo es acabar teniendo para utilizar en nuestro código el id único externo (la variable $id_unico en los ejemplos) que nos sirva para identificar y validar al usuario en nuestro sistema local.

Facebook

La integración más sencilla de todas ¡5 líneas de código!

La documentación para desarrolladores de Facebook es de las mejores, con muchos ejemplos prácticos y una comunidad muy activa. Vamos a hacer la implementación más sencilla, sin meternos en Facebook Connect, que será chicha para otro post. Los pasos serían los siguientes:

  1. Logueado en tu cuenta de Facebook debes añadirte la aplicación para desarrolladores.
  2. Creamos una nueva aplicación, y rellenamos lo básico para que funcione (el resto es para configuraciones más avanzadas)

    Campos mínimos para rellenar en la aplicación de Facebook

  3. Nos bajamos la librería cliente de PHP.
  4. ¡Y a picar!

Resumiendo, tenemos una api key, otra key privada, hemos especificado una URL propia de retorno de Facebook, y tenemos su clase de PHP (nos sobraría con los ficheros facebook.php y facebookapi_php5_restlib.php). Pues el script para loguearse con Facebook sería tan sencillo como esto:



    // cargamos la clase que nos proporcionan
    require_once('apis_externas/facebook/class_facebook.php');

    // datos de la aplicación que se nos facilitan cuando la registramos en Facebook
    $appapikey = '000000000000';
    $appsecret = '111111111111';

    // inicializamos el objeto de la clase
    $facebook = new Facebook($appapikey,$appsecret);

    // si el usuario no está logueado en Facebook le redirigirá allí
    $id_unico = $facebook->require_login();

    if(empty($id_unico))
    {
        // si a estas alturas no tenemos el id único algo ha salido mal
        $error_api = true;
    }

?>

Hay varias formas de hacer esto en Facebook, y no digo que esta sea la más correcta, pero seguro que la más sencilla. La importante es la línea 14, en la que si el usuario está logueado nos devolverá su id único, y sino le enviará a la página de login de Facebook.

Yahoo

Otra API con integración no traumática gracias a la tecnología BBAuth de Yahoo. Aquí también se pueden elegir varias implementaciones (OAuth, OpenID), pero de nuevo vamos a optar por la más sencilla y rápida de desarrollar. Los pasos son los siguientes:

  1. Vamos a la página de alta de aplicaciones (se necesita usuario de Yahoo).
  2. Creamos una nueva Browser-Based Authentication Protected Application

    Campos mínimos para rellenar en la aplicación de Yahoo

  3. Nos pedirán confirmar el dominio subiendo un fichero determinado a nuestra web.
  4. Nos bajamos la librería cliente de PHP.
  5. ¡Y a picar!

Resumiendo de nuevo, tenemos la aplicación creada, apuntadas las dos keys que necesitamos y la clase para comunicarnos con Yahoo (usaremos el fichero ybrowserauth.class.php4 o ybrowserauth.class.php5 dependiendo de nuestra versión de PHP). El código final quedará así:

[cc lang=”php”]

<?php

// datos de la aplicación que se nos facilitan cuando la registramos en Yahoo
define('APPID','000000000000');
define('SECRET','111111111111');

</p>