Cómo funciona JWT
Esta publicación describe cómo funciona JSON Web Token. Encontrarás referencias en la parte inferior de esta página si quieres profundizar.
Nota: Esta publicación se basa en mi investigación y puede diferir de la implementación en el mundo real.
Érase una vez una estudiante de ingeniería de software llamada Keiko.
Aunque extremadamente brillante, nunca trabajó en ningún proyecto del mundo real.
Así que luchó con la codificación.
Hasta que un día, decidió crear una aplicación meteorológica.
Y lo compartió con sus amigos.
Sin embargo, no tenía ni idea de cómo funcionaba la autorización de los usuarios.
HTTP no tiene estado; Significa que cada solicitud debe incluir la información necesaria.
Y sus amigos tuvieron que ingresar su nombre de usuario y contraseña en cada página para obtener la autorización.
Era frustrante.

Así que configuró un almacén de sesiones en el servidor:
Realiza un seguimiento de las sesiones de usuario y proporciona un ID de sesión al cliente.
Y el cliente incluye el ID de sesión con cada encabezado de solicitud.
A continuación, el servidor comprueba el almacén de sesiones para identificar el acceso del cliente.
Aunque resolvió temporalmente el problema de autorización, hubo problemas más nuevos.
Su pequeña aplicación se hizo popular entre los estudiantes universitarios de todo el mundo.
Así que tuvo que instalar más servidores y ponerlos detrás de un balanceador de carga.
Pero se volvió difícil administrar las sesiones con muchos servidores.
Porque el balaceador de carga puede enrutar las solicitudes de un usuario a diferentes servidores.

Así que organizó sticky sessions. Significa enrutar las solicitudes de un usuario específico al mismo servidor utilizando su ID de usuario o dirección IP.
Sin embargo, no se escala bien debido a los servidores con estado y a la distribución desigual de la carga.

Así que instaló un almacén de sesiones compartidas. Mantiene los datos de sesión separados en un almacén central.
Un almacén de sesiones compartidas permite servidores sin estado. Pero introduce el acoplamiento y se convierte en un único punto de fallo.
Por lo tanto, configuró JSON Web Token (JWT) para la autorización.

Piense en JWT como una insignia para ingresar a un edificio. Un usuario obtiene la insignia de la recepción después de la verificación. A continuación, pueden acceder a las habitaciones autorizadas sin volver a verificar su identidad.
El servidor no almacena información de sesión con JWT. En su lugar, JWT incluye la información de autorización necesaria y el servidor comprueba el JWT en cada solicitud.
Imagine la autenticación como un permiso para entrar en un edificio. Y la autorización como el permiso para entrar en determinadas estancias del edificio.
Cómo funciona JWT
1. Estructura de JWT
JWT no parece un objeto JSON, sino un conjunto de caracteres.
Consta de 3 partes:
Encabezado: Especifica el algoritmo de firma, como RSA o HMAC
Carga útil: Contiene datos y tiempo de caducidad
Firma: Muestra la autenticidad de la carga útil
La carga útil está codificada en base64url para que sea compacta y fácil de transmitir a través de las redes.

El servidor combina el encabezado y la carga útil con una clave secreta. A continuación, realiza el algoritmo de firma para crear la firma. Solo el servidor tiene acceso a la clave secreta.
El servidor vuelve a calcular la firma utilizando el encabezado y la carga útil cada vez que recibe un JWT. De este modo, se comprueba si se ha modificado la carga útil.
¿Listo para la mejor parte?
2. Flujo de trabajo de JWT

Este es el flujo de trabajo de autorización de JWT:
El usuario introduce el nombre y la contraseña para la autenticación
El servidor crea un JWT utilizando la información de autorización
El servidor firma el JWT y se lo entrega al cliente
El cliente incluye JWT en los encabezados HTTP para la autorización
El servidor permite una solicitud solo si la firma en el JWT es válida.
3. Seguridad JWT
Existe el riesgo de que JWT sea robado y utilizado para una autorización falsa.

Estas son algunas formas de evitar este problema:
Enviar JWT a través de HTTPS por seguridad
Establezca un tiempo de caducidad en el JWT para limitar el daño
Asigne roles mínimos a JWT para reducir el daño
Sin embargo, no hay forma de invalidar un JWT robado. Una solución alternativa es incluir el JWT robado en una lista de denegación en el servidor.