DEV Community

Cover image for Identidade e Segurança — Autenticação (Python Template Mongo API)

Identidade e Segurança — Autenticação (Python Template Mongo API)

Para sistemas modernos, autenticação não é apenas "validar usuário e senha". É sobre garantir persistência segura, performance e rastreabilidade.
Neste exemplo, implementamos um fluxo completo utilizando FastAPI, MongoDB, JWT, Redis e Middleware.

Componentes chaves da solução

  1. Dual Token Strategy (Access e Refresh):
    • Access Token: Curta duração, enviado via Header ou Cookie para autorizar requisições.
    • Refresh Token: Longa duração, armazenado via HttpOnly para gerar novos access tokens com segurança.
  2. Middleware de Autenticação: Camada que intercepta as requisições e valida os tokens, liberando automaticamente as rotas públicas (/login, /docs, /health).
  3. Token Blacklist (Redis): Gerenciamento de estado para tokens revogados durante o logout, impedindo ataques de replay.
  4. Login Activity Tracking: Captura rica de dados do ambiente (Dispositivo, Navegador, SO, IP) usando device-detector para auditoria e segurança.

Fluxo de Login (Passo a Passo)

  1. Requisição de Login: O cliente envia email e password. O AuthService valida as credenciais no MongoDB.
  2. Geração e Persistência: O JwtService gera os tokens. Eles são injetados na resposta como Cookies HttpOnly, uma barreira crucial contra ataques XSS. 3.Registro de Atividade: O LoginActivityService analisa o 'User-Agent' e salva o snapshot do acesso (dispositivo e localização).
  3. Middleware em Ação: Em cada rota protegida, o Middleware extrai o token, verifica se não está na Blacklist do Redis, valida o usuário e o anexa ao request.state.
  4. Ciclo de Refresh: Quando o Access Token expira, o endpoint /refresh-access-token valida o Refresh Token e emite um novo par, mantendo a UX sem interrupções.

Conclusão

Este fluxo foi pensado para ambientes reais de produção, indo muito além do básico de tutoriais.
A combinação de Stateless JWT com Stateful Blacklist (Redis) oferece o melhor dos dois mundos: escalabilidade e controle.
Na próxima parte, falaremos sobre autorização baseada em Roles & Permissions.

Código Fonte: https://github.com/ortiz-python-templates/python-mongodb-api

Top comments (0)