Saltar al contenido
Web

¿Qué es JSON Web Token? (JWT)

enero 14, 2020

Si eres programador o si andas en este mundo digital, es casi seguro que has escuchado de los JSON Web Token. El problema es que muy pocos saben muy bien que son o como usarlos. En este artículo daremos un vistazo y el uso correcto o mejor dicho, estándar de esta forma de trabajo.

Cuando nos referimos a JWT nos referimos básicamente a un formato de información estándar que es usado para hacer validaciones. Esta estructura de datos está basada en JSON es por eso que es llamada así. Es básicamente un objeto con información que los diferentes software saben interpretar.

Los JSON Web Token están construidos para ser compactos y poder ser enviados por medio de URL o URL-SAFE. También suelen contener información para determinar los privilegios y la propagación de permisos en las aplicaciones multiusuarios.

Estructura

Los JWT suelen estar compuestos por 3 partes básicas: 1) encabezado o header, 2) contenido o payload, 3) firma o signature.

Header:

En esta parte del objeto definimos algunas características de información, es decir lo que se necesita para poder leer el contenido del JWT, normalmente se define le protocolo o la tecnología que se uso para crearlo, suele tener esta estructura:

header = '{"alg":"HS256","typ":"JWT"}'

Como puedes ver es un simple objeto en formato JSON que contiene algunos atributos clave valor, en este caso se usar «alg» que tiene el valor «HS256» que indica que el JWT está firmado usando HMAC-SHA256.

Payload:

Aquí agregamos el contenido que queremos enviar, normalmente se colocan los datos de acceso o una bandera que nos diga si el acceso es autorizado o no. También en un formato JSON, algo así:

payload = '{"loggedInAs":"admin","iat":1422779638}'

También suele incluirse un campo que contenga la fecha y hora en la que fue creado el JWT (el timestamp, o «iat») para poder limitar el acceso. Así podemos configurar lo acceso para que ese JSON Web Token funcione y proporcione acceso al servicio pero solo durante un tiempo.

Después de ese tiempo se tiene que generar uno nuevo para poder seguir usando el software. Es por temas de seguridad y tener control de quien usa los programas o los sitios web.

Signature:

La firma es calculada de forma diferente, codificando el encabezamiento y el contenido en base64url,  concatenándose ambas partes con un punto como separador, por ejemplo:

key           = 'secretkey'
unsignedToken = encodeBase64Url(header) + '.' + encodeBase64Url(payload)
signature     = HMAC-SHA256(key, unsignedToken)

Muy bien, ahora que ya tenemos todas las partes creadas, debemos juntarlas para crear nuestro JWT completo. Esto se hacer concatenando con un punto cada una de las partes.

token = encodeBase64Url(header) + '.' + encodeBase64Url(payload) + '.' + encodeBase64Url(signature) # token es: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

Ya con esto tenemos nuestro JWT creado. Esta es la estructura básica, en la sección de contenido podemos enviar toda la información que necesitemos. Un buen diseño de software nos permitirá crear y diseñar los JWT de forma optimizada para no hacerlos demasiado grandes.


En un próximo artículo vamos a ver la forma en que vamos a usarlo en nuestros sitios web. El uso no es tan complicado, pero si hay que saber como implementar sanamente para que software reciba e interprete correctamente la información.

Espero que les haya servido esta información, un abrazo y hasta la próxima.