¿Qué es BrowserID? Browser ID es un nuevo servicio implementado por Mozilla, que permite que los usuarios puedan controlar sus accesos a diferentes sitios de manera más segura, ejecutándose las funciones en el mismo navegador y comprobando la identidad de los usuarios en base a criptografía asimétrica.
En internet ya existen otros servicios parecidos como por ejemplo OpenID o sistema de identificación por Facebook.
¿Cuales son las ventajas de BrowserID?
- Pueden identificarse con la misma cuanta en cualquier sitio que tenga implementado BrowserID.
- Su registro es muy sencillo, solo tienes que poner email y contraseña, una vez hecho esto verificarla y listo.
- Funciona perfectamente en cualquier navegador moderno.
- Gran soporte y mucha documentación ofrecida por Mozilla, esto facilita la vida a todos los desarrolladores.
- BrowserID protege la privacidad de nuestra actividad en la web, no filtra datos sobre qué sitios visitan los usuarios a ningún otro servidor.
Para el ejemplo que os voy a mostrar es necesario un servidor con apache/php/openSSL y utilizar el framework JQuery.
El ejemplo su basa en dos ficheros, index.php y process.php luego podéis organizarlo como queráis:
Index.php
Código
<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <script type="text/javascript"> function gotAssertion(assertion) { if (assertion !== null) { $.ajax({ type: 'POST', url: 'process.php', data: { assertion: assertion }, success: function(res, status, xhr) { if (res === null) { //loggedOut(); } else { var oJson = jQuery.parseJSON(res); if(oJson.status == 'okay'){ switch (oJson.action){ case 'new': $('#login').html('Bienvenido ' + oJson.email); break; case 'old': $('#login').html('Hola ' + oJson.email); break; case 'locked': $('#login').html('Tu cuenta esta bloqueada ' + oJson.email); break; } } else { alert('Error'); } } }, error: function(res, status, xhr) { alert("Error de conexion"); } }); } else { //loggedOut(); } } $(document).ready(function(){ $('#browserid').click(function() { navigator.id.get(gotAssertion, {allowPersistent: true}); return false; }); }) </script> <?php if(!isset($_SESSION['email'])){ ?> <div id="login"> <a href="#" id="browserid" title="Sign-in with BrowserID"> <img src="https://browserid.org/i/sign_in_grey.png" alt="Sign in"> </a> </div> <?php } else { echo "hola " . $_SESSION['email']; } ?> </body> </html>
process.php
Código
class browserID { const REMOTE_URL = 'https://browserid.org/verify'; /** * Datos cifrados de la session. * @var string */ private $_assertion; /** * Dominio. * @var string */ private $_localURL; /** * Solicitud que se envia a Mozilla. * @var array */ private $_QueryHTTP; /** * Respuesta de Mozilla. * @var string */ private $_RequestJSON; /** * Contructor principal, define los atributos _assertion y _localURL * Una vez definidos carga la solicitud HTTP desde el metodo build_query(). * * @param string $assertion Datos recibidos por el $_POST. * @param string $localURL Dominio en el que estas enviando la solicitud. */ public function __construct($assertion, $localURL){ $this->_assertion = $assertion; $this->_localURL = $localURL; $this->build_query(); } /** * Comprueba si fue satisfactoria la indetificación y nos devuelve un booleano. * * @return bool retorna true si es correcto. */ public function get_is_login(){ if($this->_RequestJSON->status == 'okay') return true; } /** * Recogemos la dirección de correo de la indentificación * * @return string dirección de correo. */ public function get_email(){ if($this->get_is_login()===true) return $this->_RequestJSON->email; } /** * Fecha en la que expira la sessión. * * @return int retorna la fecha en formato unix. */ public function get_expire(){ if($this->get_is_login()===true) return $this->_RequestJSON->expires; } /** * Cambia el dominio. * * @param string $localURL Dominio en el que estas enviando la solicitud. */ public function set_local_url($url){ $this->_localURL = $url; } /** * Envia la petición anteriormente creada por el metodo build_query. * * @param bool retorna true si todo salio correcto. */ public function set_http_request(){ if ($fp) { return true; } } /** * Contruimos la petición HTTP que sera enviada a Mozilla. * */ private function build_query(){ 'content' => $data, 'header' => "Content-type: application/x-www-form-urlencoded\r\n" ); } } //Creamos el objeto y damos los argumentos, es importante enviar el dominio correcto. $objBrowserID = new browserID($_POST['assertion'], 'www.tusitioweb.com'); if($objBrowserID->set_http_request()){ if($objBrowserID->get_is_login() === true) { //Aqui se tendria que comprobar en nuestra base de datos si existe el usuario o en su defecto, crearlo. $_SESSION['email'] = $objBrowserID->get_email(); $_SESSION['assertion'] = $_POST['assertion']; 'action' => 'new', 'email' => $_SESSION['email']); } } ?>
Espero que os haya podido ayudar en alguno, para mas información sobre BrowserID: https://developer.mozilla.org/en/BrowserID/