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.