¿Qué es JWT (JSON Web Token)?

Un JWT (JSON Web Token) es un estándar abierto (RFC 7519) que permite el intercambio seguro de información entre dos partes mediante un token compacto, firmado y auto-contenido.

El JWT se utiliza principalmente en autenticación y autorización en aplicaciones web.

Es un formato que permite verificar la identidad del usuario sin necesidad de mantener una sesión activa en el servidor.

Índice
  1. 🛠️ ¿Cómo funciona JWT?
    1. 📌 Flujo típico de uso:
    2. 📌 Ejemplo práctico JWT
  2. 🚀 ¿Por qué es importante JWT?
    1. 🔗 Relación con otros conceptos clave
  3. ❓ Preguntas frecuentes (FAQ)
    1. 🔹 ¿JWT almacena datos sensibles?
    2. 🔹 ¿Puedo invalidar un JWT antes de su expiración?
    3. 🔹 ¿Qué pasa si alguien roba mi token?
    4. 🔹 ¿JWT es lo mismo que OAuth?
    5. 🔹 ¿Qué librería usar en Flask?
  4. 📢 Conclusión y próximos pasos

🛠️ ¿Cómo funciona JWT?

Un JWT se compone de tres partes codificadas en Base64 y separadas por puntos:

  1. Header: indica el algoritmo de firma y el tipo de token.
  2. Payload: contiene los datos del usuario y otras declaraciones (claims).
  3. Signature: es el resultado de firmar el header y el payload con una clave secreta o un par de claves pública/privada.

📌 Flujo típico de uso:

  1. El usuario inicia sesión con sus credenciales.
  2. El servidor valida los datos y genera un JWT.
  3. El cliente guarda el token (por ejemplo, en localStorage) y lo envía en cada petición como Authorization: Bearer <token>.
  4. El servidor verifica el token en cada solicitud. Si es válido, permite el acceso; si no, lo deniega.

Esto evita tener que consultar una base de datos en cada petición para verificar la identidad del usuario.


📌 Ejemplo práctico JWT

Supón que un usuario inicia sesión en una app de relojería.

Pues el servidor le devuelve un JWT como este:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VySWQiOiIxMjM0NTYiLCJyb2wiOiJwcmVtaXVtIn0.
4A5dhU6x2xk1aUO04dPxMSNKV7uNc-Vu2JY7QJ2Nkek

Cuando el usuario accede a la ruta /parts, el frontend incluye ese token en la cabecera HTTP.

Y además el backend verifica la firma y extrae los datos sin tener que hacer una consulta adicional.


🚀 ¿Por qué es importante JWT?

Escalabilidad: No necesitas mantener sesiones de usuario en memoria o base de datos. Ideal para arquitecturas sin estado (stateless).
Seguridad: La firma garantiza que los datos no han sido modificados.
Interoperabilidad: Es un estándar adoptado por muchos lenguajes y frameworks.
Performance: El backend puede validar tokens rápidamente sin dependencias externas.

Además, facilita mucho el control de acceso a rutas protegidas como /admon, /parts, o /subscriptions.


🔗 Relación con otros conceptos clave

  • Autenticación JWT + Flask: Ideal para proteger APIs RESTful.
  • OAuth2: Puede usarse junto con JWT como método de autorización.
  • Middleware: Verifica el token antes de permitir acceso.
  • Tokens firmados vs cifrados: JWT se firma, no cifra. No es confidencial.
  • Session vs Token-based Auth: JWT es ideal para apps SPA y móviles.

❓ Preguntas frecuentes (FAQ)

🔹 ¿JWT almacena datos sensibles?

No debería.

El payload es visible, aunque esté firmado.

🔹 ¿Puedo invalidar un JWT antes de su expiración?

No directamente.

Puedes usar listas negras (blacklists) o cambiar la clave de firma.

🔹 ¿Qué pasa si alguien roba mi token?

Podría hacerse pasar por ti hasta que expire.

Usa HTTPS, tiempos de expiración cortos y rotación de tokens.

🔹 ¿JWT es lo mismo que OAuth?

No.

JWT es un formato; OAuth es un protocolo de autorización que puede usar JWT como portador.

🔹 ¿Qué librería usar en Flask?

PyJWT, flask-jwt-extended o Authlib.



📢 Conclusión y próximos pasos

JWT es una herramienta clave para construir sistemas de autenticación seguros y eficientes, especialmente en entornos distribuidos como APIs REST.

👉 Si estás desarrollando integrar JWT correctamente desde el inicio te ahorrará problemas y te dará flexibilidad.

 

Si quieres conocer otros artículos parecidos a ¿Qué es JWT (JSON Web Token)? puedes visitar la categoría Wiki.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir