Skip to content

Fluxo de Segurança

graph TD
    A[Requisição HTTP] --> B{Endpoint público?}
    B -->|Sim| C[Permitir acesso]
    B -->|Não| D[Verificar JWT no cabeçalho]
    D --> E{Token válido?}
    E -->|Não| F[Retornar 401 Unauthorized]
    E -->|Sim| G[Extrair ID do usuário do token]
    G --> H[Buscar usuário no banco de dados]
    H --> I{Usuário existe?}
    I -->|Não| F
    I -->|Sim| J[Verificar permissões específicas]
    J --> K{Tem permissão?}
    K -->|Não| L[Retornar 403 Forbidden]
    K -->|Sim| M[Executar operação solicitada]
    M --> N[Retornar resposta]

    O[Envio de credenciais] --> P[Receber email e senha]
    P --> Q[Buscar usuário por email]
    Q --> R{Usuário encontrado?}
    R -->|Não| S[Retornar 401 Unauthorized]
    R -->|Sim| T[Verificar senha com Argon2]
    T --> U{Senha correta?}
    U -->|Não| S
    U -->|Sim| V[Gerar token JWT]
    V --> W[Retornar token JWT]

    X[Armazenamento de senha] --> Y[Receber senha em texto plano]
    Y --> Z[Hash com Argon2]
    Z --> AA[Salvar hash no banco de dados]

    C --> N
    F --> N
    L --> N
    W --> N
    AA --> N

    style A fill:#E1F5FE
    style F fill:#FFEBEE
    style L fill:#FFEBEE
    style N fill:#E8F5E8
    style V fill:#FFF3E0
    style Z fill:#FFF3E0

Descrição do Fluxo de Segurança

1. Autenticação de Requisições

O processo de segurança começa com cada requisição recebida pela API:

  1. Verificação de Endpoint Público: A API primeiro determina se o endpoint solicitado é público ou protegido
  2. Validação de Token JWT: Para endpoints protegidos, a API verifica a presença e validade do token JWT no cabeçalho de autorização
  3. Extração de Identidade: Se o token for válido, a identidade do usuário é extraída do payload do JWT
  4. Verificação de Existência: A API verifica se o usuário ainda existe no banco de dados
  5. Verificação de Permissões: A API verifica se o usuário tem permissões específicas para a operação solicitada

2. Processo de Login

Quando um usuário tenta fazer login:

  1. Recebimento de Credenciais: A API recebe email e senha do cliente
  2. Busca de Usuário: A API busca o usuário correspondente ao email fornecido
  3. Verificação de Senha: A senha fornecida é verificada contra o hash armazenado usando Argon2
  4. Geração de Token: Se as credenciais forem válidas, um token JWT é gerado e retornado

3. Armazenamento de Senhas

Quando um usuário define ou altera sua senha:

  1. Recebimento de Senha: A senha é recebida em texto plano (deve ser via HTTPS)
  2. Hashing com Argon2: A senha é transformada em um hash usando o algoritmo Argon2
  3. Armazenamento Seguro: Apenas o hash é armazenado no banco de dados, nunca a senha em texto plano

Camadas de Segurança

Camada de Transporte

  • HTTPS: Todas as comunicações devem ser feitas via HTTPS para proteger dados em trânsito
  • Segurança de Headers: Implementação de headers de segurança HTTP

Camada de Autenticação

  • JWT Tokens: Autenticação stateless baseada em tokens assinados
  • Tempo de Expiração: Tokens expiram após período configurável (padrão: 30 minutos)
  • Algoritmo de Assinatura: HS256 com chave secreta forte

Camada de Autorização

  • Verificação de Propriedade: Usuários só podem acessar recursos que lhes pertencem
  • Controle de Acesso Baseado em Função: Diferentes níveis de acesso para diferentes tipos de usuários

Camada de Dados

  • Hashing de Senhas: Uso do Argon2, um dos algoritmos mais seguros para hashing de senhas
  • Proteção contra SQL Injection: Uso de SQLAlchemy com consultas parametrizadas
  • Validação de Entrada: Validação rigorosa de todos os dados recebidos

Medidas de Segurança Implementadas

  • Proteção contra Brute Force: Embora não implementado explicitamente, a arquitetura permite adicionar limitação de taxa
  • Revogação de Sessão: Embora os tokens JWT sejam stateless, a arquitetura permite implementar listas de revogação
  • Auditoria de Acesso: A estrutura permite implementar logging de acessos e operações
  • Validação de Dados: Todos os dados são validados usando Pydantic para prevenir injeção de dados maliciosos

Tratamento de Erros de Segurança

  • Erros Genéricos: Mensagens de erro genéricas para evitar vazamento de informações
  • Logging de Tentativas: Registro de tentativas de acesso não autorizado (quando implementado)
  • Bloqueio de Conta: A arquitetura permite implementar bloqueio temporário após múltiplas tentativas fracassadas