¡Qué tal! Eduardo Rodríguez de este lado del monitor para hablarles un poco acerca de los JWT, que son y como funcionan, pero antes no olvides pasarte por mi articulo anterior en el cual te explico acerca de SHA-512.
Un poco de contexto
Una de las cosas mas importantes para nosotros como desarrolladores es la seguridad, siempre estamos buscando mejores alternativas para que cualquiera de nuestros desarrollos sea lo mas seguro posible. Garantizar que la información que se transmite a través de nuestro sistema se mantenga privada es primordial ¿No es así? Bueno, aquí te explico como es que funciona una de los metodos mas actuales para lograr esto: JWT.
¿Que es JWT?
JWT (por sus siglas en ingles JSON Web token) es un estándar que define una manera segura de transmitir información a través de JSON. Lo que hace a JWT seguro es su firma digital, la cual permite que quien lo recibe pueda verificar su autenticidad y saber si ha sido modificado o no.
¿Para que se utiliza?
Uno de los usos mas comunes del JWT es para autorización, de hecho es el escenario mas común donde este estándar se utiliza. Una vez que el usuario se autentica, cada llama después de eso debe incluir el JWT, lo cual permite al usuario acceder a los recursos a los que dicho token tiene acceso. La realización de un solo login usando JWT es muy utilizado en estos días, ya que el costo de enviarlo en cada llamada es realmente pequeño y se puede utilizar a través de diferentes dominios sin problema.
Otro escenario en donde se podría utilizar JWT es para el intercambio de información, debido a que los JWT pueden ser firmados, cualquiera de las partes involucradas puede verificar que dicho JWT viene de donde dice venir, además de esto, como la firma se calcula usando el header y el payload, también se puede verificar que la información no haya sido alterada.
Estructura de un JWT
Esta es la manera en como se ve un JWT:
Un JWT se divide en 3 partes:
Header
La primera parte del JWT (la cadena color rojo) es el header, este contiene el tipo de token y el algoritmo usado para realizar la firma. Estos valores pueden ser modificados, pero por lo general se utilizan los siguientes:
{ "alg": "HS256", "typ": "JWT" }
Payload
La segunda parte de un JWT (la cadena color rosa) es el payload, esta parte contiene la información que queremos compartir, en el caso de los JWT se les llama Claims. Los Claims son básicamente datos generalmente del usuario al que fue asignado el token e información adicional sobre el mismo token. Existen Claims que por estándar están definidos y si bien no son obligatorios es recomendable usarlos, también puedes definir tus propios claims, al final sigue siendo un JSON lo que se envía como payload.
Ejemplo:
{ "sub": "1234567890", "name": "John Doe", "admin": true }
Signature
La tercera y ultima parte (la cadena color azul) es el signature, la cual se utiliza para verificar que el mensaje no haya sido alterado. Este signature se forma usando el header (Base64Url), el payload (Base64Url) y un secreto y a todo esto se le aplica el algoritmo seleccionado en el header.
Ejemplo:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
Como podran ver, al final lo que tenemos son 3 cadenas en Base64Url separadas por puntos. Asi es como se forma un JWT.
Algo importante a considerar es que jamás debes enviar información sensible en el payload. Si bien hay manera de verificar el JWT, cualquier persona podría tomarlo y ver que información contiene.
Algunos links de ayuda
La implementación de JWT dependerá de la tecnología que estén usando. En este articulo trate de explicar de manera genérica que es y como funciona, aun así les toca a cada uno de ustedes investigar y determinar cual es la mejor librería dependiendo de su lenguaje de programación y necesidades.
En nuestro caso nosotros trabajamos con Nodejs y Android así que les dejo un par de links a las librerías que usamos para realizar este proceso:
- Nodejs: jsonwebtoke
- Android: jjwt
Conclusion
Como podrás ver usar JWT es una manera muy eficiente y segura para verificar la identidad, te invito que lo pruebes y nos cuentes como te fue.
Espero este post les haya ayudado.
Hasta la próxima.