cors_policy
SKILL.md
cors_policy
La política CORS define qué dominios frontend pueden realizar peticiones al API KYC. Una configuración incorrecta (wildcard *) permite a cualquier web maliciosa hacer peticiones en nombre del usuario autenticado.
When to use
Configurar antes de exponer cualquier endpoint. Aplicar tanto en FastAPI (para dev) como en Nginx (producción) — Nginx es el punto de entrada real y es quien envía los headers CORS al browser.
Instructions
- En FastAPI para desarrollo (
backend/main.py):from fastapi.middleware.cors import CORSMiddleware ALLOWED_ORIGINS = os.environ["ALLOWED_ORIGINS"].split(",") app.add_middleware(CORSMiddleware, allow_origins=ALLOWED_ORIGINS, allow_methods=["POST", "GET"], allow_headers=["Authorization", "Content-Type", "X-Request-ID"], allow_credentials=True, max_age=3600, ) - En Nginx (producción), en el bloque
server:set $cors_origin ""; if ($http_origin ~* "^https://(app\.tudominio\.com|admin\.tudominio\.com)$") { set $cors_origin $http_origin; } add_header "Access-Control-Allow-Origin" $cors_origin always; add_header "Access-Control-Allow-Credentials" "true" always; add_header "Access-Control-Allow-Methods" "POST, GET, OPTIONS" always; - Manejar preflight OPTIONS devolviendo 204 sin pasar al upstream.
- Definir
ALLOWED_ORIGINSen Vault/config por entorno: dev, staging, producción tienen listas distintas. - Nunca incluir
localhosten la lista de producción. - Verificar en tests de integración que peticiones desde origen no permitido reciben 403.
Notes
allow_credentials=Truerequiere queallow_originssea una lista explícita, nunca["*"].- El preflight request (OPTIONS) no lleva JWT — el middleware CORS debe responder antes del middleware de auth.