Autenticação unificada ECOSIF — MVP 1 a 3
Guia consolidado do refactor de autenticação (branch feat/security-auth-refactor nos submódulos).
Proposta completa: .internal_docs/proposta-completa-autenticacao.md
Visão geral
Usuário → IdP (local / Azure / Google)
→ ecosif-angular → POST /api/auth/external-login (token externo validado)
→ ecosif-auth emite JWT ECOSIF (HMAC HS256)
→ microsserviços validam JWT via ecosif-spring-boot-starter-security
| Camada | Responsabilidade |
|---|---|
| IdP externo | Comprovar identidade (Microsoft Entra, Google) |
ecosif-auth |
Validar token externo (JWKS), provisionar usuário, emitir JWT ECOSIF |
| Microsserviços Java | Apenas JWT ECOSIF (Authorization: Bearer) |
| API Gateway | Validar JWT ECOSIF nas rotas /ecosif-* (exceto login público) |
Roadmap por MVP
| MVP | Foco | Status |
|---|---|---|
| MVP1 | external-login, starter JWT, Angular MSAL/GIS, compose |
✅ Implementado |
| MVP2 | Auto-provision configurável, endurecimento operacional | ✅ Implementado |
| MVP3 | Remoção legado, sub configurável, Google redirect |
✅ Implementado |
| MVP4 | Groups/claims → tenant/role, access token no gateway | 📋 Backlog |
| MVP5 (Fase 7) | Modos B/C no código, client_credentials, API key/mTLS, Azure+Google |
📋 Planejado — ../dev/mvp5_integracao_avancada.md |
Endpoints atuais (ecosif-auth)
| Método | Rota | Uso |
|---|---|---|
POST |
/api/auth/external-login |
Login Azure, Azure Enterprise ou Google (id token) |
POST |
/api/auth/signin |
Login local usuário/senha (ecosif-automations, integrações) |
Removidos no MVP3: POST /api/auth/signin-azure, signin com azure: true (retorna 400 se enviado).
Variáveis essenciais (.env)
# JWT — idêntico em auth + 4 microsserviços + gateway
AUTH_TOKEN_SECRET=...
TOKEN_EXPIRATION=1800000
ECOSIF_JWT_SUBJECT_CLAIM=username # ou userId (MVP3)
# Provedor externo (um por ambiente)
ECOSIF_AUTH_PROVIDER=AZURE # NONE | AZURE | AZURE_ENTERPRISE | GOOGLE
ECOSIF_ENABLE_LOCAL_AUTH=true
ECOSIF_ENABLE_AZURE_AUTH=true
# Azure
ECOSIF_AZURE_CLIENT_ID=...
ECOSIF_AZURE_TENANT_ID=...
ECOSIF_AZURE_SCOPES=openid,profile,email
ECOSIF_AZURE_EXPECTED_ISSUER= # opcional (MVP3); default derivado do tenant
# Google
ECOSIF_GOOGLE_CLIENT_ID=...
ECOSIF_GOOGLE_AUTH_MODE=popup # ou redirect (MVP3)
# Provisionamento (MVP2)
ECOSIF_AUTH_AUTO_PROVISION=false # false → 404 se usuário não existir
ECOSIF_AUTH_DEFAULT_TENANT=TEMP_TENANT
ECOSIF_AUTH_DEFAULT_ROLE=STAFF
Repositórios e artefatos
| Submódulo | Conteúdo |
|---|---|
ecosif-spring-boot-starter-security |
TokenProvider, TokenAuthenticationFilter, SubjectAwareJwtSubjectUserDetailsService |
ecosif-auth |
external-login, validators JWKS, UserProvisioningService |
ecosif-angular |
MSAL, GIS, external-login no login |
ecosif-structure |
docker-compose.yml, env.template, docs deploy |
Starter distribuído em libs/ecosif-spring-boot-starter-security-*.jar de cada serviço Java.
Documentação por fase
| Documento | Conteúdo |
|---|---|
| starter_security_jwt.md | Fase 1: starter JWT, versão 0.7.05.202606102, bump nos pom.xml |
| frontend-external-login-fase3.md | Fase 3: MSAL/GIS, runtime config, checklist E2E |
| external-login-backend.md | Fase 2: validators, provisionamento, testes |
| external-login-api.md | Contrato HTTP POST /api/auth/external-login |
| variaveis_autenticacao_baseline.md | Baseline .env-dev: o que mudou, quando usar, valor esperado |
| gateway_jwt_ecosif.md | Gateway e JWT ECOSIF |
| ../dev/mvp2_operacao.md | Auto-provision e produção |
| ../dev/mvp3_flexibilidade.md | sub, Google redirect, issuer Azure |
| ../dev/mvp5_integracao_avancada.md | Fase 7: Modos B/C, client_credentials, borda, multi-IdP |
Checklist homologação
Status plataforma eCosif (local / pen-test auth 2026-07-07 + regressão automations): concluído para Modo A.
Revalidar em cada ambiente de cliente.
- [x]
docker compose buildauth + angular + serviços migrados - [x] Login Microsoft →
external-login→ JWT nas APIs - [x] Login local (
signin) para automations - [x] Com
ECOSIF_AUTH_AUTO_PROVISION=false, usuário não cadastrado → 404 - [x]
AUTH_TOKEN_SECRETigual em todos os containers Java - [x] Gateway rejeita chamadas sem JWT (exceto rotas públicas) — Traefik / pen-test M-05
Próximo passo (MVP4 + MVP5)
- MVP4 — ver ../dev/mvp4_identidade.md: groups/claims, Graph overage, Admin UI
- MVP5 (Fase 7) — ver ../dev/mvp5_integracao_avancada.md: Modos B/C,
POST /api/auth/token, API key/mTLS, Azure+Google simultâneos (AUTH-09)