Thursday, August 21, 2014

HapiJS - Autenticacion REST con hapi-auth-bearer-token plugin

Introducción

En este articulo explicamos el uso de Bearer token plugin para HapiJS.

API  publico o privado?

Un REST API recurso puede ser privado si por medio de routing lo podemos crear  de uso exclusivo para una aplicacion de server. En este caso cada llamado debe ser de HapiJS UI server page a REST API. Dado que Rutha utiliza ambos, y nuestra aplicacion es un SPA (Single  Page Application), la opcion de API privado no es factible. En este caso optamos por utilizar autenticacion a nivel de REST.

Modelo ideal segun Twitter de autenticacion 'Application Only'

Segun Twitter, son tres pasos que se requieren:
  • Una aplicacion codifica la llave y secreto del usuario (consumer key and secret) en un set de credenciales. Esto es lo que adquieres en la mayoria de los OAuth APIs y el cual debes incluir en tus aplicaciones.
  • Una aplicacion crea una llamada POST a un recurso o 'endpoint' OAuth2/token para intercambio de token (bearer token o token al portador).
  • Para acceder al API REST, la aplicacion utiliza el token al portador para autenticar.

Usando HapiJS

En este ejemplo no explicaremos completame el flujo, solo nos enfocamos en el punto #3, en donde autenticamos llamados al API REST. El punto 1 y 2 para aplicaciones no publicas como Twitter, es posible con la autenticacion del usuario generar un token al portador permitiendo al usuario acceder el API REST que requiere ser autenticado.

En el bootloader de HapiJS

Registramos el plugin de 'hapi-auth-bearer-token' y la estrategia con validateFunc, que contiene la logica del token. Esto se puede reemplazar por un datastore en Redis o MongoDB que almacene la sesion, o algun otro metodo criptografico.

Rutas

En las rutas, toda ruta que requiera previa autenticacion, le asignamos en config.auth el nombre de la estrategia a utilizar.

Consumidor del API

Finalmente, en el cliente nos aseguramos de enviar el header de autorizacion con el token al portador.


Hasta la siguiente entrega
Rogelio Morrell


No comments:

Post a Comment