Los Beneficios de JWT+JWS+JWE en el Diseño de API

Por mayo 10, 2018

Hoy es un excelente día para hablar sobre algunas de las buenas razones para adoptar JWT (JSON Web Token) + JWS (JSON Web Sign) + JWE (JSON Web Encryption) en su diseño de API.

 

Pero, ¿qué son todas estas cosas?  Vamos por partes.

{ “JSON Web Token (JWT)” }

JWT es una solución moderna para un problema antiguo: ¿Cómo sé quién es ese usuario? Nos ayudan al tener firma, ser stateless (protocolo sin estado) y por tener un formato común de datos.  Es un sistema de transferencia segura de datos, que puede enviarse por URL, POST o en un encabezado HTTP de manera segura. El usuario firma la información digitalmente a través de un algoritmo criptográfico.  Una vez que el usuario está conectado, se incluirá el JT para cada pedido realizado, permitiendo el acceso en los servicios y recursos del sistema.

Los JSON Web Token funcionan en diferentes lenguajes de programación: .NET, Python, Node.js, Java, PHP, Ruby, Go, JavaScript y Haskell. Lo que permite su uso en diferentes escenarios.

Como son autónomos, se cargará toda la información necesaria. Esto significa que un JWT será capaz de transmitir información básica sobre sí, una carga útil (generalmente información del usuario) y una firma.  Esa es la autonomía que permite que sean fácilmente transmitidos, pudiendo ser utilizados dentro de un encabezado de HTTP al autenticar una API, o ser enviados a través de una URL.

 { “JSON Web Encryption (JWE)” }

JWE representa un contenido cifrado usando estructuras de datos JSON y utiliza la criptografía para garantizar la confidencialidad del contenido del texto simple. Un punto de atención es que JWE no añade una verificación de integridad de contenido si no es suministrado por el algoritmo de criptografía insertado.

{ “Definición JWS + JWE” }

Un objeto firmado con JWT/ JWS puede ser adicionalmente cifrado, proporcionando integridad, autenticidad, aceptación y confidencialidad a los datos.

  1. El JWT es firmado con una clave privada de RSA o Curva Elíptica.
  2. El JWT firmado se convierte en la carga útil (texto plano) de un objeto JWE, que es cifrado con la clave pública (RSA o EC) del destinatario, o con una clave secreta que fue compartida entre las dos partes.

El procesamiento de un JWT anidado funciona de atrás hacia adelante:

  1. El objeto JWE es cifrado con la clave apropiada (clave privada para RSA, Curva Elíptica o clave secreta establecida).
  2. La carga extraída (texto simple) es entonces analizada como JWT firmado y verificado con la clave pública del emisor (RSA o EC).

{ “JWT como autenticación” }

Este es el escenario más común para el uso de JWT. Después de que el usuario esté conectado, cada solicitud subsiguiente incluirá el JWT, permitiendo que el usuario acceda a rutas, servicios y recursos permitidos con ese token. Single Sign On es un recurso que utiliza ampliamente el JWT en la actualidad, debido a su sobrecarga y a su capacidad de ser fácilmente usado en diferentes dominios.

{ “Conclusión” }

  • El estándar JSON Web Token puede utilizarse en varios lenguajes de programación y puede cambiarse de forma rápida y fácil.
  • La versatilidad de JSON Web Token nos permite firmar, cifrar y autenticar una API de forma rápida y fácil, pasando información a través del token.
  • Payload contiene toda la información necesaria sobre el usuario, evitando la necesidad de consultar la base de datos más de una vez.
  • Debido a su tamaño menor, los JWT pueden enviarse a través de un URL, parámetro POST o dentro de un encabezado HTTP. Además, el tamaño menor significa que la transmisión es rápida.

Escrito por Wagner Brunca
Sr. Consultant, PreSales – Cyber Security, API Management and Microservices
LinkedIn: @wagnerbrunca