elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Como utilizar BrowserID
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como utilizar BrowserID  (Leído 1,386 veces)
WarGhost
I love basket


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Como utilizar BrowserID
« en: 26 Junio 2012, 14:48 pm »

BrowserID:

¿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
  1. <?php session_start(); ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4.    <head>
  5.        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
  6.        <script src="https://browserid.org/include.js" type="text/javascript"></script>  
  7.  
  8.        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  9.    <title>Ejemplo BrowserID</title>
  10.    </head>
  11.  
  12.    <body>
  13.        <script type="text/javascript">
  14.            function gotAssertion(assertion) {  
  15.                if (assertion !== null) {  
  16.                    $.ajax({  
  17.                        type: 'POST',  
  18.                        url: 'process.php',  
  19.                        data: { assertion: assertion },  
  20.                            success: function(res, status, xhr) {  
  21.                                if (res === null) {
  22.                                    //loggedOut();  
  23.                                } else {
  24.                                    var oJson = jQuery.parseJSON(res);
  25.  
  26.                                    if(oJson.status == 'okay'){
  27.                                        switch (oJson.action){
  28.                                            case 'new':
  29.                                                $('#login').html('Bienvenido ' + oJson.email);
  30.                                                break;
  31.                                            case 'old':
  32.                                                $('#login').html('Hola ' + oJson.email);
  33.                                                break;
  34.                                            case 'locked':
  35.                                                $('#login').html('Tu cuenta esta bloqueada ' + oJson.email);
  36.                                                break;
  37.                                            }
  38.                                        } else {
  39.                                            alert('Error');
  40.                                        }
  41.                                    }
  42.                                },  
  43.                                error: function(res, status, xhr) {  
  44.                                    alert("Error de conexion");  
  45.                                }
  46.                            });  
  47.                        } else {  
  48.                            //loggedOut();  
  49.                        }  
  50.                    }  
  51.  
  52.                $(document).ready(function(){
  53.                    $('#browserid').click(function() {  
  54.                    navigator.id.get(gotAssertion, {allowPersistent: true});  
  55.                    return false;  
  56.                });  
  57.            })
  58.        </script>
  59.        <?php if(!isset($_SESSION['email'])){ ?>
  60.        <div id="login">
  61.            <a href="#" id="browserid" title="Sign-in with BrowserID">  
  62.                <img src="https://browserid.org/i/sign_in_grey.png" alt="Sign in">  
  63.            </a>  
  64.        </div>
  65.        <?php } else { echo "hola " . $_SESSION['email']; } ?>
  66.    </body>
  67. </html>

process.php
Código
  1. <?php session_start();
  2.    class browserID {
  3.        const REMOTE_URL = 'https://browserid.org/verify';
  4.  
  5.        /**
  6.           * Datos cifrados de la session.
  7.           * @var string
  8.           */
  9.        private $_assertion;
  10.  
  11.        /**
  12.           * Dominio.
  13.           * @var string
  14.           */
  15.        private $_localURL;
  16.  
  17.        /**
  18.           * Solicitud que se envia a Mozilla.
  19.           * @var array
  20.           */
  21.        private $_QueryHTTP;
  22.  
  23.        /**
  24.           * Respuesta de Mozilla.
  25.           * @var string
  26.           */
  27.        private $_RequestJSON;
  28.  
  29.        /**
  30.          * Contructor principal, define los atributos _assertion y _localURL
  31.          * Una vez definidos carga la solicitud HTTP desde el metodo build_query().
  32.           *
  33.           * @param string $assertion Datos recibidos por el $_POST.
  34.          * @param string $localURL Dominio en el que estas enviando la solicitud.
  35.          */
  36.        public function __construct($assertion, $localURL){
  37.             $this->_assertion = $assertion;
  38.             $this->_localURL = $localURL;
  39.  
  40.             $this->build_query();
  41.        }
  42.  
  43.        /**
  44.          * Comprueba si fue satisfactoria la indetificación y nos devuelve un booleano.
  45.           *
  46.          * @return bool retorna true si es correcto.
  47.          */
  48.        public function get_is_login(){
  49.            if($this->_RequestJSON->status == 'okay') return true;
  50.        }
  51.  
  52.        /**
  53.          * Recogemos la dirección de correo de la indentificación
  54.           *
  55.          * @return string dirección de correo.
  56.          */
  57.        public function get_email(){
  58.            if($this->get_is_login()===true) return $this->_RequestJSON->email;
  59.        }
  60.  
  61.        /**
  62.          * Fecha en la que expira la sessión.
  63.           *
  64.          * @return int retorna la fecha en formato unix.
  65.          */
  66.        public function get_expire(){
  67.            if($this->get_is_login()===true) return $this->_RequestJSON->expires;
  68.        }
  69.  
  70.  
  71.        /**
  72.          * Cambia el dominio.
  73.           *
  74.          * @param string $localURL Dominio en el que estas enviando la solicitud.
  75.          */
  76.        public function set_local_url($url){
  77.            $this->_localURL = $url;
  78.        }
  79.  
  80.        /**
  81.          * Envia la petición anteriormente creada por el metodo build_query.
  82.          *
  83.          * @param bool retorna true si todo salio correcto.
  84.          */
  85.        public function set_http_request(){
  86.            $ctx = stream_context_create($this->_QueryHTTP);
  87.            $fp = fopen(self::REMOTE_URL, 'rb', false, $ctx);
  88.  
  89.            if ($fp) {
  90.                $result = stream_get_contents($fp);
  91.                $this->_RequestJSON = json_decode($result);
  92.  
  93.                return true;
  94.            }
  95.        }
  96.  
  97.        /**
  98.          * Contruimos la petición HTTP que sera enviada a Mozilla.
  99.           *
  100.          */
  101.        private function build_query(){
  102.            $httpArray =    array('assertion' => $this->_assertion,
  103.                                  'audience'  => urlencode($this->_localURL));
  104.  
  105.            $data =     http_build_query($httpArray);
  106.            $this->_QueryHTTP = array('http' => array( 'method'  => 'POST',
  107.                                                       'content' => $data,
  108.                                                       'header'  => "Content-type: application/x-www-form-urlencoded\r\n"
  109.                                                                  . "Content-Length: " . strlen($data) . "\r\n")
  110.                                      );
  111.        }
  112.    }
  113.  
  114.    //Creamos el objeto y damos los argumentos, es importante enviar el dominio correcto.
  115.    $objBrowserID = new browserID($_POST['assertion'], 'www.tusitioweb.com');
  116.  
  117.    if($objBrowserID->set_http_request()){
  118.        if($objBrowserID->get_is_login() === true) {
  119.             //Aqui se tendria que comprobar en nuestra base de datos si existe el usuario o en su defecto, crearlo.
  120.             $_SESSION['email'] = $objBrowserID->get_email();
  121.             $_SESSION['assertion'] = $_POST['assertion'];
  122.  
  123.             $json    = array( 'status' => 'okay',
  124.                               'action' => 'new',
  125.                               'email'  => $_SESSION['email']);
  126.        }
  127.  
  128.        echo json_encode($json);
  129.    }
  130. ?>

Espero que os haya podido ayudar en alguno, para mas información sobre BrowserID: https://developer.mozilla.org/en/BrowserID/


« Última modificación: 26 Junio 2012, 14:51 pm por WarGhost » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines