Los tokens web JSON, o JWT, constan de tres partes que son importantes para comprender cómo funcionan y por qué.
Un JWT se parece a:
CABECERO CUERPO FIRMA
- Cómo migrar mi aplicación Iron Speed a MVC
- ¿En qué se diferencia Joomla de las otras plataformas para construir sitios web? ¿Y cuáles son sus características especiales?
- ¿Cómo puedo perfeccionar mis habilidades de JavaScript (JQuery) sin invertir demasiado tiempo en diseño HTML y CSS?
- ¿Qué tan fácil es mantener una gran base de código React.js?
- ¿Cuáles son las tareas laborales del desarrollador Junior JavaScript?
La primera parte es el encabezado, que almacena información básica, como el algoritmo utilizado para codificar la firma JWT (escuchará más sobre esto cuando lleguemos a la parte firmada).
A continuación tenemos el cuerpo. El cuerpo consiste en la carga útil, que son solo datos que desea tener al verificar un usuario / token. Para este ejemplo, diremos que estamos almacenando la ID del usuario y el nivel de seguridad (lo que indicaría dónde se les permite ingresar a la aplicación).
Tanto el encabezado como el cuerpo están codificados en la codificación Base64 del usuario, por lo que toda la información que contienen es completamente pública. (Nunca almacene información confidencial en un JWT).
La parte que permite la autenticación es la firma. Esto se codifica utilizando cualquier algoritmo definido en el encabezado (y al decodificar la firma debe pasar el algoritmo manualmente, no confíe en el encabezado porque algunos paquetes tienen fallas conocidas que pueden permitir que un JWT no firmado aparezca firmado). Básicamente, usa el contenido de los dos componentes anteriores, y le aplica el algoritmo, y también proporciona un secreto para usar en el hash (esto es conocido solo por la aplicación que desea autenticar).
En esencia, firma = HASHINGALGORITHM (Base64 (HEADER) + ‘.’ + Base64 (BODY) + ‘.’ + SECRET)
Si se altera alguna parte de la secuencia anterior, también lo es el hash de firma.
Entonces, cuando el servidor recibe una solicitud, con un JWT, puede decodificar los dos primeros componentes, ya que solo está codificado en Base64. Sin embargo, la firma requiere que se use el mismo algoritmo de hash (que es de conocimiento público) y el mismo secreto (privado y solo conocido por su aplicación) para crear la misma firma, (los buenos hash no se pueden deshacer, es más fácil adivinar aleatoriamente lo que era un hash criptográficamente seguro de lo que es hacer ingeniería inversa o descifrarlo). Entonces, la firma del JWT solicitante debe ser igual al resultado de ejecutar las dos primeras partes, más el secreto proporcionado a través del mismo algoritmo. Si este es el caso, entonces el servidor puede decir con confianza que el JWT, y su contenido (cambiarlos, aunque sea fácil, alteraría el hash e invalidaría el token) son seguros y como estaban cuando su servidor los emitió.
Si desea leer más, este enlace: JWT.IO – Introducción a los tokens web JSON es un buen lugar para comenzar