Que es en realidad JWT

Muchas veces vemos que se habla de JWT como un método de autenticación. Pero realmente se dice eso por que es su caso de uso mas frecuente. Vamos a ver de que se compone un Json Web Token y en que momentos se pude usar.

Definición de JWT

JWT es un standard RFC 7519 que define un método compacto, autónomo y seguro para transmitir información entre 2 sistemas. Se usa un objeto JSON de forma segura y mucho mas ligera que XML. Veamos por que es:

  • Compacto: Es de tamaño pequeño, se puede usar en un HTTP header, como parámetro GET o POST.
  • Autónomo: El payload contiene toda la información necesaria para el caso de uso. En autenticación por ejemplo puede tener toda la información del usuario sin tener que consultar la base de datos.

Como se compone

El JWT se compone de 3 partes:

  • Header: Contiene la información del tipo de token y el algoritmo de encriptación usado

  • Payload: Contiene el objeto JSON que se está transmitiendo, puedes usar algunas de las propiedades reservadas ( https://tools.ietf.org/html/rfc7519#section-4.1 ) para dar información sobre quien genera el token y otras cosas útiles.

  • Firma: Crea la firma digital que valida que el JWT sea válido y se conozca su procedencia.

Cada parte del token se codifica en base 64 y se unen con un punto (.). Dependiendo del método de encriptación la firma se puede generar de diferentes maneras. En el caso de usar HMAC SHA256 la firma se generaría de la siguiente forma.

El secret, sería compartido por las aplicaciones que pueden comunicarse a travez de JWT.

Ejemplo

Como pueden ver, hay 3 partes unidas por un punto (.).

¿Por que se habla de JWT como un método de autenticación?

En la comunidad de Laravel se hizo muy famoso un paquete que se utiliza para autenticar peticiones HTTP usando en header de Authorization con un JWT. El paquete se llama jwt-auth y hace uso de un JWT que transmite la información del usuario y que puede después recuperarla en la petición que contiene el header. Sin embargo se tiende mucho a decir que JWT es un método de autenticación cuando no lo es realmente. Aunque si es uno de sus casos de uso mas frecuentes y probablemente el que le dio vida.

En donde mas se ven estos tokens

Laravel Passport que es una implementación de un servidor oAuth2 para laravel del paquete de Alex Bilbie en PHP league (http://oauth2.thephpleague.com) usa un JWT como access token y refresh tokens que son encriptados con una llave publica y privada.

Está es solo una introducción a lo que es un Json Web Token, puedes encontrar mas información dependiendo del caso de uso que quieras resolver.

Feliz programación.

Comparte este artículo

Entra en la discusión y deja tu comentario

  • Servirá por ejemplo para autentificación en una api?

    • Adolfo Cuadros

      Claro que si.. JWT es genial

      • Existe algún tutorial en esta web para ver el modo de integración como parte de autenticación en una api en laravel?

  • Yo intenté usar esta tecnología con laravel con esta api https://api.gwentapi.com/v0
    Pero no entendía como usarla, solo lleva enlaces y más enlaces.

Veces