Pular para conteúdo

Regras de Negócio - ecosif-auth

Atualizado (MVP1): autenticação externa via external-login + JWKS; JWT via starter io.ecosif.security.jwt.TokenProvider.

1. Autenticação local (signin)

RN-001: Validação de credenciais

  • Username e password obrigatórios
  • Mensagem uniforme para usuário inexistente ou senha errada (401)

RN-002: Usuário ativo

  • active = true obrigatório → senão 401 "Usuário inativo"

RN-003: Validade do usuário

  • Se expiryDate < now401 "O usuário expirou"

RN-004: Validação de senha

  • BCrypt via AuthenticationManager

RN-005: Campo azure no signin

  • "azure": true em POST /api/auth/signin400 — usar external-login

2. Login externo (external-login)

RN-006: Validação criptográfica do IdP

  • Token validado via JWKS (Microsoft ou Google)
  • aud, iss, exp conforme env (ECOSIF_*_EXPECTED_*)

RN-007: Provedor por ambiente

  • Um ECOSIF_AUTH_PROVIDER por ambiente; body provider deve ser compatível

RN-008: Auto-provisionamento

  • ECOSIF_AUTH_AUTO_PROVISION=true → cria usuário com tenant/role padrão
  • false → usuário inexistente retorna 404

RN-009: Username único

  • Email/username único em gr_user

RN-010: Role padrão

  • Sem role definida → STAFF (ou ECOSIF_AUTH_DEFAULT_ROLE)

3. Tokens JWT ECOSIF

RN-011: Validade

  • TTL via TOKEN_EXPIRATION (padrão 30 min)

RN-012: Assinatura

  • HMAC HS256/HS512 via TokenProvider do starter (AUTH_TOKEN_SECRET)

RN-013: Claims

  • sub configurável: ECOSIF_JWT_SUBJECT_CLAIM (username ou userId)
  • iat, exp obrigatórios

RN-014: Validação nas APIs

  • TokenAuthenticationFilter do starter em todos os microsserviços Java
  • Modo A: só JWT ECOSIF no header — não aceitar id_token Microsoft/Google

4. Multi-tenancy, roles, admin

RN-015 a RN-021 permanecem válidas (roles, tenant, endpoints /api/admin/**).

5. Tratamento de erros e logs

RN-022: Mensagens sem vazamento

  • Sem stack trace ao cliente; sem senha/token em respostas

RN-023: Códigos HTTP

  • 200, 400, 401, 404, 500 conforme contrato

RN-028: Log de login estruturado

  • local_signin event=* — username mascarado (LocalAuthLog)
  • external_login event=* — provider, sub, sem token (ExternalAuthLog)

RN-029: Sem dados sensíveis em log

  • Proibido logar senha, id_token ou JWT completo

Referências