FastAPI Middleware y CORS: Configuración Segura resuelve un problema frecuente en proyectos Python: Añade lógica transversal y permite solo los orígenes que necesita tu aplicación web. Esta guía explica el mecanismo, presenta un ejemplo ejecutable y marca los límites que evitan una implementación frágil.
Concepto y caso de uso
Middleware ejecuta lógica alrededor de cada petición. CORS es una política del navegador para llamadas entre orígenes distintos, es decir, cuando cambia esquema, host o puerto.
Para repasar los fundamentos relacionados, consulta también la guía de FastAPI. La integración es más simple cuando cada función recibe dependencias y datos explícitamente en lugar de depender de estado global.
Ejemplo práctico
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["https://app.example.com"],
allow_credentials=True,
allow_methods=["GET", "POST"],
allow_headers=["Authorization", "Content-Type"],
)
@app.middleware("http")
async def request_id(request: Request, call_next):
response = await call_next(request)
response.headers["X-Request-ID"] = request.headers.get("X-Request-ID", "new")
return response
Usa una lista explícita de orígenes si hay cookies o encabezados Authorization. El comodín no funciona con credenciales y concede más acceso del necesario.
Decisiones importantes
La elección correcta depende del contrato público, del volumen y del comportamiento ante fallos.
Considera concurrencia, entradas vacías y fallos parciales. Documenta cada límite que afecte a consumidores y usa nombres que expresen intención.
Errores frecuentes
El ejemplo mínimo no sustituye límites, manejo de errores y observabilidad. No confundas CORS con autenticación o firewall. Los clientes que no son navegadores aún pueden llamar a la API. Mantén el middleware breve y no registres tokens.
Evita capturar excepciones sin contexto o devolver resultados parciales como si fueran completos. Un fallo explícito suele ser más seguro que datos silenciosamente incorrectos.
Cómo validar
Valida el comportamiento y no solo el camino feliz. Prueba un preflight OPTIONS y una petición simple desde un origen permitido y otro bloqueado. Comprueba headers, estado y credenciales.