BrowserID: ¡Mira mama, sin passwords!

Nucklear

¿Que es?

BrowserID consiste en una serie de librerías que permiten el login a cualquier sitio web introduciendo únicamente un email. Este sistema soporta la mayoría de CMS mayoritarios a través de plugins y existen librerías para la mayoría de lenguajes web usados actualmente.

¿Como implementarlo?

1. Habilita BrowserID en tu sitio web

Incluye la librería include.js de BrowserID en tu sitio agregando el siguiente script a su <head>.

<script src="https://browserid.org/include.js" type="text/javascript"></script>

2. Identifica al usuario

En lugar de mostrar un formulario en tu sitio para pedir un nombre de usuario y una contraseña, usa el API de BrowserID hecho en Javascript cuando el usuario hace clic en su botón de inicio de sesión:

navigator.id.get(function(assertion) {
    if (assertion) {
        //Este código será invocado una vez que el usuario ha
        //seleccionado una dirección de correo electrónico de su propiedad.
    } else {
        // Algo fue mal y no se pudo registrar.
    }
});

Tras iniciar sesion correctamente, se pedira una nueva confirmación ( assertion ), un string que contiene una petición firmada que prueba que el usuario es quien dice ser.

3. Verificando al usuario

Debemos verificar que la confirmación es autentica, y extraer el email del usuario de ésta. Para ello, lo mas facil es usar el sistema de verificación de BrowserID.

Para esto, enviamos una petición a https://browserid.org/verify con dos parametros mediante POST.

1- assertion: La confirmación codificada
2- audience: El hostname de tu sitio y el puerto (El puerto es opcional)

El verificador confirma que el assetion corresponde a tu web y que es válido, veamos un ejemplo:

$ curl -d "assertion=<ASSERTION>&audience=https://mysite.com" "https://browserid.org/verify"
{
    "status": "okay",
    "email": "lloyd@example.com",
    "audience": "https://mysite.com",
    "expires": 1308859352261,
    "issuer": "browserid.org"
}

Y esto es todo, no necesitamos mas verificación si no queremos.

Ejemplo

En esta web podemos ver un ejemplo http://myfavoritebeer.org/ y revisar el código aqui https://github.com/lloyd/myfavoritebeer.org/

Dudas

Una vez visto como se implementa, mirar un poco el source y probar varios ejemplos me entran dos dudas:

¿Si un usuario valida un email y otra persona en otro sitio usa su email, tiene acceso?

Si lo que realmente hace es asignar un token a cada email basado en su navegador...¿Que pasa si el usuario intenta logear desde otro PC?

¿Que opináis de este sistema?¿Lo habéis probado?

La página web oficial es BrowserID.

PD: Funciona en todos los navegadores de escritorio y móviles.

PiradoIV

Todo esto de las ID's únicas es muy interesante y peligroso a la vez, ¿qué tal van en el tema de seguridad?... ¡invoco a OleMoudi!

1 respuesta
Nucklear

#2 Ese es el problema que le veo y no entiendo muy bien como va, ¿sabes alguno de las preguntas que puse en #1?.

En la WIKI de github hay esto: https://github.com/mozilla/browserid/wiki/Security-Considerations-when-Implementing-BrowserID

PiradoIV

Como usuario, el email lo necesitas validar antes de usar el sistema, no van a poder escribir en tu nombre a no ser que te roben la cuenta. Si entras desde otro navegador/ordenador, al loguearte te va a pedir que metas tu email y contraseña la primera vez que te intentes loguear a uno de estos sitios

Problema 1:
Cuando cierras el navegador debería desloguearte de tu cuenta de BrowserID, porque cuando lo abres de nuevo tienes acceso a toooodas las páginas que lo soporten, con tu cuenta.

Problema 2:
Hay que tener mucho ojo como usuario, al darle al Sign in, cuando nos pide que metamos el usuario y contraseña, toca comprobar que el popup que te salta la primera vez provenga realmente de browserid.org, ¡si no nos fijamos nos pueden robar la cuenta sin que nos enteremos!

OleMoudi

Por lo que veo en el paso 3 no es más que un Single Sign-On que utiliza browserid como servidor central de autenticación.

Ante las dudas que os surgen tenéis que pensar que esto es como cuando pagas con paypal en una tienda. Durante el proceso de checkout se te lleva a paypal donde introduces tu email y tu password y autorizas el pago. La tienda es informada mediante un transactionid (que funciona igual que el assertion aquí) de si has pagado ya o no. En todo momento hay un password involucrado aunque la tienda o vuestro sitio que utiliza browserid no lo vea.

¿Es seguro? bueno, a priori si, lo que no quita que mañana le descubra un fallo algún investigador aburrido o con ganas de que Mozilla le pague un bounty.

1 respuesta
LOc0

Básicamente es lo que dice #5

La contraseña que NECESITAS y que tendrás que introducir la primera vez que arranques el navegador es la de la dirección de correo que vayas a usar para identificarte.

El proceso va así:

tocho

Salu2 ;)

1
dagavi

Bueno, se puede poner a la cola con Facebook Connect, el login de Twitter, Google Accounts, Windows Live y sistemas OpenID.

2
X-Crim

veremos a ver como avanza.

Usuarios habituales

  • X-Crim
  • dagavi
  • LOc0
  • OleMoudi
  • PiradoIV
  • Nucklear