FastAPI Middleware e CORS: Configure com Segurança resolve um problema recorrente em projetos Python: Configure a camada entre requisição e resposta e libere apenas as origens necessárias. Este guia mostra o mecanismo, um exemplo executável e os limites que evitam uma implementação frágil.

Conceito e caso de uso

Middleware executa lógica ao redor de cada requisição. CORS é uma política aplicada pelo navegador para controlar chamadas entre origens, isto é, combinações diferentes de esquema, host ou porta.

Para revisar os fundamentos relacionados, consulte também o guia de FastAPI. A integração fica mais simples quando cada função recebe dependências e dados explicitamente, em vez de depender de estado global.

Exemplo prático

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

Use uma lista explícita de origens quando houver cookies ou cabeçalhos Authorization. O curinga não combina com credenciais e amplia uma permissão que deveria refletir os front-ends reais.

Decisões importantes

A escolha correta depende do contrato público, do volume e do comportamento em caso de falha.

Considere como a solução se comporta sob concorrência, entradas vazias e falhas parciais. Documente qualquer limite que afete consumidores e mantenha nomes que expressem a intenção.

Erros comuns

O exemplo mínimo não substitui limites, tratamento de erros e observabilidade. Não confunda CORS com autenticação ou firewall. Ele não impede clientes fora do navegador de chamar a API. Mantenha o middleware curto, preserve exceções e não registre tokens.

Evite capturar exceções sem contexto ou retornar resultados parciais como se fossem completos. Uma falha explícita costuma ser mais segura que dados silenciosamente incorretos.

Como validar

Valide o comportamento, não apenas a linha feliz. Teste a requisição preflight OPTIONS e uma requisição simples a partir de uma origem permitida e outra bloqueada. Confirme headers, status e credenciais.

A documentação oficial, consultada em 28 de julho de 2026, detalha a API e deve ser a referência para mudanças futuras.