Pular para conteúdo

Casos de Uso - ecosif-auth

MVP1 Modo A: autenticação local (signin), login externo (external-login) e JWT via starter ecosif-spring-boot-starter-security.

Visão Geral

Casos de uso do ecosif-auth após o refactor de autenticação unificada (JWT ECOSIF + external-login).


CU-001: Autenticação Local (Usuário/Senha)

Descrição

Login com username e senha armazenados no eCosif (POST /api/auth/signin).

Ator Principal

Usuário ou integração server-to-server (ecosif-automations)

Pré-condições

  • Conta existente, ativa e não expirada

Fluxo Principal

  1. POST /api/auth/signin:
    { "username": "joao.silva@empresa.com", "password": "senha123" }
    
  2. Validação Bean Validation
  3. Busca usuário por username
  4. Verifica ativo e expiryDate
  5. AuthenticationManager valida senha (BCrypt)
  6. io.ecosif.security.jwt.TokenProvider emite JWT ECOSIF
  7. Resposta 200 com accessToken, user, tenantName

Fluxos Alternativos

  • Credenciais inválidas → 401 (mensagem genérica)
  • Inativo / expirado → 401
  • "azure": true no body → 400 (campo legado rejeitado)

Logs

  • local_signin event=attempt|success|failed|rejected (username mascarado, sem senha)

CU-002: Login Externo (Microsoft / Google)

Descrição

Browser ou cliente envia id_token do IdP; backend valida JWKS e emite JWT ECOSIF.

Ator Principal

Usuário (Angular + MSAL/GIS) ou integrador com token IdP

Pré-condições

  • ECOSIF_AUTH_PROVIDER habilita o provedor do body (AZURE, AZURE_ENTERPRISE, GOOGLE)
  • Token IdP válido (assinatura, aud, iss, exp)

Fluxo Principal

  1. IdP autentica usuário no browser (MSAL popup ou Google GIS)
  2. POST /api/auth/external-login:
    {
      "provider": "AZURE",
      "token": "<id_token>",
      "tokenType": "ID_TOKEN"
    }
    
  3. IdentityProviderValidator valida token (JWKS)
  4. UserProvisioningService.findOrProvision — cria usuário se ECOSIF_AUTH_AUTO_PROVISION=true
  5. Emite JWT ECOSIF via starter TokenProvider
  6. Resposta 200 com accessToken, user, tenantName

Fluxos Alternativos

  • Token inválido → 401
  • Provider não habilitado no env → 400
  • Usuário inexistente e AUTO_PROVISION=false404
  • Usuário inativo/expirado → 401

Logs

  • external_login event=attempt|success|validation_failed|user_not_found|rejected (sem token IdP completo)

CU-003: Validação de Token JWT em Requisição Protegida

Descrição

Microsserviço valida JWT ECOSIF via ecosif-spring-boot-starter-security.

Pré-condições

  • Token emitido pelo ecosif-auth com AUTH_TOKEN_SECRET compartilhado

Fluxo Principal

  1. Cliente envia Authorization: Bearer <JWT_ECOSIF>
  2. TokenAuthenticationFilter (starter) valida assinatura e exp
  3. LocalUserDetailService resolve usuário pelo claim sub (ECOSIF_JWT_SUBJECT_CLAIM)
  4. Requisição processada com SecurityContext populado

Fluxos Alternativos

  • Token ausente/inválido/expirado → 401
  • Token Microsoft/Google direto na API (Modo A) → 401

CU-004: Refresh de Sessão (GET /user)

Descrição

Angular chama GET /ecosif-masterdata/user com JWT válido; resposta inclui novo accessToken.

Fluxo

  1. Interceptor detecta token próximo de expirar ou recebe 401
  2. GET /user com Bearer atual
  3. Novo JWT salvo no localStorage
  4. Falha de refresh → logout e redirect /login

CU-005 / CU-006: Logs Docker (Admin)

Inalterados — requerem JWT válido em /api/admin/docker-logs.


Resumo

ID Nome Endpoint Prioridade
CU-001 Autenticação local POST /api/auth/signin Alta
CU-002 Login externo POST /api/auth/external-login Alta
CU-003 Validação JWT APIs protegidas Alta
CU-004 Refresh sessão GET /user Alta
CU-005 Logs Docker GET /api/admin/docker-logs Baixa

Migração de contratos antigos: migracao-signin-azure.md.