Contenido del curso

Generando tokens con PyJWT

Resumen

Proteger rutas en una aplicación web requiere un mecanismo confiable de autenticación. Generar un JSON Web Token (JWT) tras el inicio de sesión es una de las estrategias más utilizadas en el desarrollo backend moderno. A continuación se explica paso a paso cómo crear esa funcionalidad usando FastAPI y la librería PyJWT.

¿Cómo instalar PyJWT para crear tokens en Python?

Antes de escribir cualquier lógica, es necesario instalar el módulo que permite codificar y decodificar tokens. Desde la terminal, con la aplicación detenida, se ejecuta el siguiente comando [00:30]:

bash pip install pyJWT

PyJWT es una librería ligera de Python que implementa el estándar JSON Web Token. Con ella es posible convertir un diccionario de datos en un token firmado que luego el cliente enviará en cada petición a rutas protegidas.

¿Cómo crear la función que genera el token?

Una vez instalada la dependencia, se crea un archivo dedicado llamado jwt_manager.py. Separar esta responsabilidad en su propio módulo mantiene el código organizado y reutilizable [00:46].

python from jwt import encode

def create_token(data: dict) -> str: token: str = encode(payload=data, key="my_secret_key", algorithm="HS256") return token

La función create_token recibe tres elementos clave:

  • Payload: el diccionario con la información que se convertirá en el contenido del token.
  • Key: una clave secreta (my_secret_key en el ejemplo) que firma el token. Esta misma clave será necesaria para descifrarlo posteriormente, por lo que debe almacenarse de forma segura.
  • Algorithm: el algoritmo de cifrado. Se utiliza HS256 (HMAC with SHA-256), que es el estándar recomendado por defecto [01:29].

El resultado es un string que representa el token firmado, listo para ser devuelto al cliente.

¿Cómo integrar el token en una ruta de login con FastAPI?

Con la función lista, el siguiente paso es conectarla al flujo de autenticación dentro del archivo main.py [01:52].

¿Qué modelo de datos se necesita para el usuario?

Se define un modelo con Pydantic heredando de BaseModel. Este modelo valida automáticamente los datos que envía el cliente [02:08]:

python from pydantic import BaseModel

class User(BaseModel): email: str password: str

Al declarar email y password como atributos de tipo str, FastAPI genera la documentación interactiva y verifica que la petición contenga ambos campos.

¿Cómo configurar la ruta POST de login?

Se importa la función y se crea un endpoint con el decorador @app.post [02:22]:

python from jwt_manager import create_token

@app.post("/login", tags=["auth"]) def login(user: User): return user

Algunos puntos importantes:

  • Se usa POST en lugar de GET porque se envían credenciales en el cuerpo de la petición.
  • La etiqueta tags=["auth"] agrupa el endpoint en la sección de autenticación dentro de la documentación automática de Swagger.
  • El parámetro user de tipo User permite que FastAPI extraiga y valide el JSON del request body.

Al levantar la aplicación y acceder a la documentación interactiva, la sección auth muestra la ruta /login solicitando un email y un password [02:55].

Con esta base funcional, el flujo completo consistirá en validar las credenciales, generar el token con create_token y devolverlo al usuario para que lo incluya en futuras peticiones a rutas protegidas. ¿Ya has implementado autenticación con JWT en tus proyectos? Comparte tu experiencia en los comentarios.