Regras de Negócio - ecosif-auth
Atualizado (MVP1): autenticação externa via
external-login+ JWKS; JWT via starterio.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 = trueobrigatório → senão 401 "Usuário inativo"
RN-003: Validade do usuário
- Se
expiryDate < now→ 401 "O usuário expirou"
RN-004: Validação de senha
- BCrypt via
AuthenticationManager
RN-005: Campo azure no signin
"azure": trueemPOST /api/auth/signin→ 400 — usarexternal-login
2. Login externo (external-login)
RN-006: Validação criptográfica do IdP
- Token validado via JWKS (Microsoft ou Google)
aud,iss,expconforme env (ECOSIF_*_EXPECTED_*)
RN-007: Provedor por ambiente
- Um
ECOSIF_AUTH_PROVIDERpor ambiente; bodyproviderdeve ser compatível
RN-008: Auto-provisionamento
ECOSIF_AUTH_AUTO_PROVISION=true→ cria usuário com tenant/role padrãofalse→ usuário inexistente retorna 404
RN-009: Username único
- Email/username único em
gr_user
RN-010: Role padrão
- Sem role definida →
STAFF(ouECOSIF_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
TokenProviderdo starter (AUTH_TOKEN_SECRET)
RN-013: Claims
subconfigurável:ECOSIF_JWT_SUBJECT_CLAIM(usernameouuserId)iat,expobrigatórios
RN-014: Validação nas APIs
TokenAuthenticationFilterdo 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,500conforme 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_tokenou JWT completo