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