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.

Próximo passo (MVP4 + MVP5)