DEV Community

Nahuel Segovia
Nahuel Segovia

Posted on

Json Web Token, ¿Qué es?

¿Qué es JWT o Json Web Token?

JSON Web Token es un estándar abierto basado en JSON propuesto por IETF para la creación de tokens de acceso que permiten la propagación de identidad y privilegios o claims en inglés.

Contiene toda la información importante sobre una entidad, lo que significa que no hace falta consultar una base de datos ni que la sesión tenga que guardarse en el servidor (sesión sin estado)

¿Cómo se compone un JWT?

Un token JWT se compone de 3 partes codificadas en base64 que están separadas por un punto. Estas tres partes son las siguientes:

Header:

Contiene generalmente 2 valores y nos proporciona información sobre tipo de token y el tipo de cifrado que se utilizó para generarlo:

{ "alg": "HS256", "typ": "JWT" }
Enter fullscreen mode Exit fullscreen mode

Payload:

Contiene los datos del usuario y sus privilegios, aunque también podemos enviar otros tipos de datos(algo que no es recomendable)

Signature:

Sería la firma que nos permite verificar que quien está tratando de hacer algo con nuestra aplicación sea la persona con los permisos suficientes. Esta firma se crea a través de la unión de las anteriores partes (Header + Paylod) codificados en base64 y una clave secreta que generalmente es proporcionada por el servidor, esto hace que el hash generado sea único y si alguien intenta modificarlo, su valor va a cambiar, por lo que no ya no va a servir para hacer peticiones en nuestro server.

Generando un JWT en pseudocódigo(Platzi):

key =  'clavesecreta'
unsignedToken = base64Encode(header) + '.' + base64Encode(payload)
signature = SHA256(key, unsignedToken)
token = unsignedToken + '.' + signature
Enter fullscreen mode Exit fullscreen mode

Token final:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjUwMTYyNzQxLCJpYXQiOjE2NTAxNjI0NDEsImp0aSI6Ijg0ZjhjMDlkZDE2MzRiMGNhZDlhMzUzZTNmODNlMDA4IiwidXNlcl9pZCI6MX0.qflyviX71uzLknz5YAjviVr1Bya-Z1e9AGXuHKuwEFc
Enter fullscreen mode Exit fullscreen mode

Algo bueno es que podemos jugar con la página oficial de JWT y ver la composición de un token de una manera mucho más entendible:

Image description

Top comments (0)