Implementar JSON Web Tokens con NodeJS

implementando JSON Web Tokens con NodeJS - Cuarta parteJSON Web Tokens o simplemente JTW, es una herramienta que nos permite autenticarnos con el servidor mediante Tokens de una forma simple y segura. Los Tokens son una cadena de alfanumérica, que es generada por el servidor y es enviada al cliente para autenticaciones futuras, evitando tener que enviar credenciales en cada invocación.

 

Te recomiendo que te des una venta a mi artículo Autenticación con JSON Web Tokens, el cual abordo toda la teoría, por si no estás familiarizado con el concepto de Tokens y la forma de trabajar.

Este artículo es parte de una colección de artículo en donde explico cómo Construir un API REST con NodeJS, por lo que si estas interesado puede regresar desde el comienzo.

 

Implementando JWT en un API REST

Lo primero será instalar el módulo de JWT, para lo cual, ejecutaremos el comando npm install --save jsonwebtoken , una vez hecho esto, tendremos que implementar un servicio de autenticación tradicional, el cual reciba usuario y contraseña y nos regrese un token en caso de éxito. El servicio quedaría de la siguiente manera:

 

La función login recibe como parámetro el usuario ( req.body.user ) y el password ( req.body.password ), los cuales los tendremos que validar contra nuestros usuarios, sin embargo, en este caso, para hacerlo más simple, lo hemos validado contra el usuario oscar/1234, si la autenticación falla, entonces regresamos un error al cliente. Por otra parte, si todo sale bien, creamos un token al usuario, el cual tiene una vigencia de 24 horas, para finalmente retornarlo.

Veamos un ejemplo de autenticación:

Creando el Token JWS

En la imagen pasada hemos enviado las credenciales correctas para que nos genere un token, sin embargo, no se puede ver correctamente debido a su longitud, es por ello que lo ponemos por a continuación:

 

Este token deberá ser guardado por el usuario para futuras invocaciones al API.

 

Autenticándonos mediante Tokens

El siguiente paso será crear un servicio protegido que valida la existencia del token, de lo contrario, evitará el acceso, para ello crearemos un servicio de prueba llamado secure:

 

Como podemos observar, lo primero que tenemos que hacer, es recuperar el header correspondiente al token, es decir, el token “ authorization ”, si este header no se encuentra, entonces retornamos un código 401 (No autorizado) y regresamos el motivo del error.

El siguiente paso es algo confuso, pues al token hay que retirarla el substring “ Baerer “, este String es parte de las especificaciones de HTTP, y es agredo de forma automática, por lo que no entraremos en detalles, simplemente lo retiramos.

Finalmente, validamos el token mediante el método verify, el cual validará que el token sea válido y además que no esté caducado, en cualquiera de estos dos casos, un error 401 es retornado junto con el mensaje de error. Finalmente, si todo sale bien, procedemos con la operación de negocio.

 

El siguiente request es enviado son el header, retornando un error 401 y su mensaje de error correspondiente:

Validacion fallida del token JWT

 

Este nuevo request es enviado con el header ‘ authorization ’ el cual corresponde a un token válido generado por el servicio de login:

 

NOTA: Siempre será mejor usar un middleware para validar el token, de esta forma, evitamos tener que validar el token en cada autenticación, sin embargo, lo hemos hecho así para hacer más fácil el ejemplo.

 

 

 

Artículos relacionados

Autenticación con JSON Web Tokens Los JSON Web Tokens (JWT) se ha convertido rápidamente en un estándar en la autenticación de aplicaciones, pues permite de una forma simple y elegante...
Como construir un API REST con NodeJS (Primera par... Hoy en día, es más notable la necesidad de construir API’s para nuestras aplicaciones, las cuales nos permitan integrar nuestras aplicaciones con otra...
Introducción a NodeJS (JavaScript del lado del Ser... NodeJS es sin duda una de las tecnologías que más rápido está creciendo, y que ya hoy en día es indispensable para cubrir posiciones de trabajo. NodeJ...

Oscar Blancarte

Ideológico, Innovador y emprendedor, Padre, Tecnólogo y Autor, amante de la ciencia y la tecnología en todos sus colores y sabores. Arquitecto de software & Full Stack Developer con experiencia en la industria del desarrollo de software y la consultoría. Amante de la programación y el Ajedrez.

2 comentarios en “Implementar JSON Web Tokens con NodeJS

  1. Observación en el primer código le hace falta esto:

    Instalar body parser:
    npm install -save body-parser
    e invocarlo:
    var bodyParser = require(‘body-parser’);

    Duda, si yo quiero tener un JS separado del server.js para introducir el código del JWT para luego nada mas invocarlo en mis servicios rest, ¿como sería?

    1. Gracias por las observaciones, las tomaré en cuenta.

      Con respecto a tu pregunta, eso es muy simple, solo creas las funciones que creas necesarias en un archivos JS separado, y al final del archivo las exportas (module.exports) y luego solo importas el archivos JS desde server.js y utilizas la función.

      saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *