Variáveis de autenticação — baseline e mudanças
Referência válida (ambiente CRU): .env-dev
Cenário baseline: login da plataforma (usuário/senha) + login via Azure AD simples (ECOSIF_AUTH_PROVIDER=AZURE).
Este documento lista somente variáveis novas ou com comportamento alterado no refactor feat/security-auth-refactor. Variáveis de infra (portas, Postgres, S3, etc.) permanecem como em .env-dev.
Convenção de nomes: variáveis novas de autenticação/gateway usam no máximo 32 caracteres. Prefixo ECOSIF_GWVAL_* para flags de validação no API Gateway.
| Nome atual (≤32) | Nome antigo (não usar) |
|---|---|
ECOSIF_GWVAL_JWT_ECOSIF |
ECOSIF_GATEWAY_VALIDATE_JWT_ECOSIF |
ECOSIF_GWVAL_ACCESSTOKEN_MS |
ECOSIF_GATEWAY_VALIDATE_ACCESS_TOKEN_MICROSOFT |
ECOSIF_GWVAL_ACCESSTOKEN_GOOG |
ECOSIF_GATEWAY_VALIDATE_ACCESS_TOKEN_GOOGLE |
Perfil baseline (não alterar sem motivo)
Use estes valores para reproduzir o ambiente atual de desenvolvimento local:
# JWT — igual em auth + 4 microsserviços Java
AUTH_TOKEN_SECRET=<mesmo-secret-em-todos>
TOKEN_EXPIRATION=1800000
ECOSIF_JWT_SUBJECT_CLAIM=username
# UI + provedor
ECOSIF_ENABLE_LOCAL_AUTH=true
ECOSIF_ENABLE_AZURE_AUTH=true
ECOSIF_ENABLE_GOOGLE_AUTH=false
ECOSIF_AUTH_PROVIDER=AZURE
ECOSIF_ENABLE_RUNTIME=true
# Azure AD simples (não Enterprise)
ECOSIF_AZURE_CLIENT_ID=<app-registration-spa>
ECOSIF_AZURE_TENANT_ID=<tenant-id>
ECOSIF_AZURE_AUTHORITY=https://login.microsoftonline.com/<tenant-id>
ECOSIF_AZURE_SCOPES=openid,profile,email
ECOSIF_AZURE_EXPECTED_AUDIENCE= # vazio = usa CLIENT_ID
ECOSIF_AZURE_API_AUDIENCE= # vazio — só Enterprise
ECOSIF_AZURE_EXPECTED_ISSUER= # vazio = derivado do tenant
# Provisionamento no backend (antes era no Angular)
ECOSIF_AUTH_AUTO_PROVISION=true
ECOSIF_AUTH_DEFAULT_TENANT=TEMP_TENANT
ECOSIF_AUTH_DEFAULT_ROLE=STAFF
ECOSIF_AUTH_DEFAULT_CREATED_BY=AZURE_AD
# Modo de token nas APIs (padrão MVP1)
ECOSIF_API_TOKEN_MODE=ECOSIF_JWT
ECOSIF_GWVAL_JWT_ECOSIF=true
Resultado esperado no baseline:
| Ação | Fluxo | Resultado |
|---|---|---|
| Login local | Formulário → POST /api/auth/signin |
JWT ECOSIF no localStorage; APIs com Authorization: Bearer |
| Login Microsoft | Botão Azure → MSAL popup → POST /api/auth/external-login com id_token |
JWT ECOSIF; usuário criado automaticamente se não existir |
| Chamada API | Qualquer microsserviço /ecosif-* |
Backend valida JWT ECOSIF (HS256 + AUTH_TOKEN_SECRET) |
Tabela de mudanças (variável a variável)
JWT compartilhado
| Variável | O que mudou | Quando usar | Valor no baseline | Resultado esperado |
|---|---|---|---|---|
ECOSIF_JWT_SUBJECT_CLAIM |
Nova. Padroniza o claim sub do JWT em auth, masterdata, querys, etc. |
Sempre que todos os serviços compartilham o mesmo .env |
username |
sub = e-mail do usuário; refresh em GET /user consistente |
TOKEN_EXPIRATION |
Sem mudança de nome; agora documentada como TTL único do JWT ECOSIF | Ajustar tempo de sessão (ms) | 1800000 (30 min) |
Token expira após 30 min; Angular pode renovar via /user |
Provedor e tela de login (Angular)
| Variável | O que mudou | Quando usar | Valor no baseline | Resultado esperado |
|---|---|---|---|---|
ECOSIF_AUTH_PROVIDER |
Nova. Substitui o fluxo legado signin-azure / azure: true no signin |
Um valor por ambiente; define qual IdP externo o backend aceita em external-login |
AZURE |
Backend valida id_token Microsoft via JWKS |
ECOSIF_ENABLE_LOCAL_AUTH |
Passou a ser obrigatória no runtime (config.json) |
false = esconde formulário usuário/senha |
true |
Formulário de login visível |
ECOSIF_ENABLE_AZURE_AUTH |
Controla botão Microsoft no Angular (independente do provider em casos edge) | true com ECOSIF_AUTH_PROVIDER=AZURE |
true |
Botão "Entrar com Microsoft" visível |
ECOSIF_ENABLE_GOOGLE_AUTH |
Nova flag de UI para Google GIS | true apenas se ECOSIF_AUTH_PROVIDER=GOOGLE |
false |
Sem botão Google |
ECOSIF_ENABLE_RUNTIME |
Sem mudança; gera config.json no container Angular |
Docker/ECS: true |
true |
Angular lê vars do entrypoint, não só environment.ts |
Azure AD — validação no servidor
| Variável | O que mudou | Quando usar | Valor no baseline | Resultado esperado |
|---|---|---|---|---|
ECOSIF_AZURE_SCOPES |
Substitui hardcode user.read no MSAL |
Lista CSV sem espaços; OIDC mínimo para login simples | openid,profile,email |
Popup Microsoft sem scope Graph; id_token válido para external-login |
ECOSIF_AZURE_EXPECTED_AUDIENCE |
Nova. Valida claim aud do id_token no auth |
Vazio = usa ECOSIF_AZURE_CLIENT_ID |
(vazio) | Rejeita token de outra aplicação (401) |
ECOSIF_AZURE_API_AUDIENCE |
Nova. Só para AZURE_ENTERPRISE |
Preencher quando ECOSIF_AUTH_PROVIDER=AZURE_ENTERPRISE |
(vazio) | Não usado no baseline |
ECOSIF_AZURE_EXPECTED_ISSUER |
Nova. Issuer explícito (MVP3) | Tenant custom ou multi-tenant avançado | (vazio) | Issuer derivado: https://login.microsoftonline.com/{tenant}/v2.0 |
Provisionamento de usuário (movido do frontend para o auth)
| Variável | O que mudou | Quando usar | Valor no baseline | Resultado esperado |
|---|---|---|---|---|
ECOSIF_AUTH_AUTO_PROVISION |
Antes o Angular criava usuário com senha fixa; agora o auth decide | false em produção restrita (MVP2) |
true |
Primeiro login Azure cria gr_user com tenant/role padrão |
ECOSIF_AUTH_DEFAULT_TENANT |
Antes TEMP_TENANT no login.component.ts |
Todo auto-provision MVP1 | TEMP_TENANT |
Usuário novo vinculado ao tenant padrão |
ECOSIF_AUTH_DEFAULT_ROLE |
Antes STAFF no frontend |
Todo auto-provision MVP1 | STAFF |
Role inicial do usuário novo |
ECOSIF_AUTH_DEFAULT_CREATED_BY |
Nova. Metadado created_by |
Identificar origem do provisionamento | AZURE_AD |
Campo created_by = AZURE_AD no BD |
ECOSIF_AUTH_DEFAULT_EXPIRY_TYPE |
Nova. Campo expiry_type em gr_user |
Ajuste de política de conta | A |
Conta com tipo de expiração "A" |
ECOSIF_AUTH_DEFAULT_EXPIRY_YEARS |
Nova. Validade padrão da conta | Ajuste de política de conta | 1 |
Conta válida ~1 ano |
Rate limit external-login (P4-04)
| Variável | O que mudou | Quando usar | Valor no baseline | Resultado esperado |
|---|---|---|---|---|
ECOSIF_AUTH_EXT_LOGIN_RL_EN |
Nova. Liga/desliga rate limit por IP | Produção com IdP externo | true |
Protege contra brute-force no endpoint público |
ECOSIF_AUTH_EXT_LOGIN_RL_MAX |
Nova. Máximo de POST por janela/IP | Ajuste por ambiente | 30 |
Após o limite, HTTP 429 |
ECOSIF_AUTH_EXT_LOGIN_RL_WIN |
Nova. Janela em segundos | Ajuste por ambiente | 60 |
Contador reinicia após a janela |
Modo de token nas APIs e gateway
| Variável | O que mudou | Quando usar | Valor no baseline | Resultado esperado |
|---|---|---|---|---|
ECOSIF_API_TOKEN_MODE |
Nova. Define qual token trafega em Authorization nas APIs |
Baseline e maioria dos clientes | ECOSIF_JWT |
Angular envia JWT ECOSIF (não o token Microsoft) |
ECOSIF_GWVAL_JWT_ECOSIF |
Nova. Flag de documentação/ops para gateway (≤32 chars) | Traefik, API Gateway, ALB | true |
Gateway deve validar HS256 com AUTH_TOKEN_SECRET |
ECOSIF_GWVAL_ACCESSTOKEN_MS |
Nova. Gateway valida access token Microsoft (Modo B) | ECOSIF_API_TOKEN_MODE=AZURE_ENTERPRISE_GATEWAY |
false |
Ver gateway_access_token_entra.md |
ECOSIF_GWVAL_ACCESSTOKEN_GOOG |
Nova. Gateway valida token Google (Modo C) | ECOSIF_API_TOKEN_MODE=GOOGLE_GATEWAY |
false |
Ver gateway_access_token_google.md |
Valores adicionais de ECOSIF_API_TOKEN_MODE:
| Valor | Uso |
|---|---|
HYBRID_ECOSIF_AZURE |
Login local → JWT ECOSIF nas APIs; login Microsoft → token Azure cru (id_token ou access token conforme ECOSIF_AUTH_PROVIDER). Ver gateway_hibrido_ecosif_azure.md. |
OAuth2 legado nos microsserviços Java
| Variável | O que mudou | Quando usar | Valor no baseline | Resultado esperado |
|---|---|---|---|---|
SPRING_AUTOCONFIGURE_EXCLUDE |
Recomendado desligar OAuth2 client Spring não usado | Quando AUTH2_CLIENT_ID está vazio |
org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration |
Sem redirect Google server-side nos backends |
Cenários além do baseline (quando mudar)
Só login local (sem Azure)
ECOSIF_AUTH_PROVIDER=NONE
ECOSIF_ENABLE_AZURE_AUTH=false
ECOSIF_ENABLE_LOCAL_AUTH=true
Resultado: apenas formulário usuário/senha; ecosif-automations continua usando POST /api/auth/signin.
Azure Enterprise + gateway (Modo B)
ECOSIF_AUTH_PROVIDER=AZURE_ENTERPRISE
ECOSIF_API_TOKEN_MODE=AZURE_ENTERPRISE_GATEWAY
ECOSIF_AZURE_SCOPES=openid,profile,email,api://<client-id>/access_as_user
ECOSIF_AZURE_API_AUDIENCE=api://<client-id>
ECOSIF_GWVAL_JWT_ECOSIF=false
ECOSIF_GWVAL_ACCESSTOKEN_MS=true
Quando: cliente com APIM/WAF que só aceita access token Entra.
Resultado: login com id_token em external-login; APIs com access token Microsoft. Ver gateway_access_token_entra.md.
Google Gateway (Modo C)
ECOSIF_AUTH_PROVIDER=GOOGLE
ECOSIF_API_TOKEN_MODE=GOOGLE_GATEWAY
ECOSIF_GWVAL_JWT_ECOSIF=false
ECOSIF_GWVAL_ACCESSTOKEN_GOOG=true
Resultado: login e APIs com token Google. Ver gateway_access_token_google.md.
Híbrido ECOSIF + Azure (P7-E — cenários 1, 2 e 3)
ECOSIF_ENABLE_LOCAL_AUTH=true
ECOSIF_ENABLE_AZURE_AUTH=true
ECOSIF_AUTH_PROVIDER=AZURE # cenário 2: id_token nas APIs (aud = client-id)
# ECOSIF_AUTH_PROVIDER=AZURE_ENTERPRISE # cenário 3: access token nas APIs
ECOSIF_API_TOKEN_MODE=HYBRID_ECOSIF_AZURE
ECOSIF_AZURE_SCOPES=openid,profile,email # cenário 2
# ECOSIF_AZURE_SCOPES=openid,profile,email,api://<client-id>/access_as_user # cenário 3
# ECOSIF_AZURE_API_AUDIENCE=api://<client-id> # obrigatório no cenário 3 (backends)
Quando: mesmo ambiente precisa aceitar login local (JWT ECOSIF) e login Microsoft (SSO com token Azure cru), sem troca de token na sessão.
Resultado: external-login provisiona no primeiro login Azure; APIs autenticam HS256 (local) ou RS256 (Azure) na mesma rota. Ver gateway_hibrido_ecosif_azure.md.
Google Workspace
ECOSIF_AUTH_PROVIDER=GOOGLE
ECOSIF_ENABLE_GOOGLE_AUTH=true
ECOSIF_ENABLE_AZURE_AUTH=false
ECOSIF_GOOGLE_CLIENT_ID=<oauth-web-client>
ECOSIF_GOOGLE_EXPECTED_AUDIENCE= # vazio = CLIENT_ID
ECOSIF_GOOGLE_AUTH_MODE=popup
Resultado: botão Google GIS → external-login com id_token Google.
Desligar auto-criação de usuário (MVP2 / homologação restrita)
ECOSIF_AUTH_AUTO_PROVISION=false
Resultado: login externo de usuário não cadastrado → HTTP 404 (não cria conta).
O que não existe mais (comportamento removido)
| Antes | Agora | Impacto se não atualizar o cliente |
|---|---|---|
POST /api/auth/signin-azure com { username } |
POST /api/auth/external-login com { provider, token } |
Login Azure falha (404/400) |
POST /api/auth/signin com azure: true |
Mesmo endpoint retorna 400 | Integração antiga quebra |
Angular createAzureLoginUser() + senha "123456" |
ECOSIF_AUTH_AUTO_PROVISION no auth |
Não enviar mais userCreate do frontend |
MSAL scope fixo user.read |
ECOSIF_AZURE_SCOPES |
Usar OIDC; Graph só se explicitamente necessário |
Checklist rápido — baseline funcionando
Status plataforma eCosif (.env-dev / Modo A): concluído. Itens 2–3 dependem do IdP habilitado no ambiente.
- [x]
AUTH_TOKEN_SECRETidêntico em auth, masterdata, moviments, querys, reports e Angular (ECOSIF_ANGULAR_AUTH_TOKENvazio = herda no compose). - [x]
ECOSIF_AUTH_PROVIDER=AZUREe IDs Azure preenchidos (baseline.env-dev). - [x]
ECOSIF_ENABLE_LOCAL_AUTH=trueeECOSIF_ENABLE_AZURE_AUTH=true. - [x]
docker composesobe com.env-dev(ou cópia.env.full.example). - [x] Login Microsoft → rede mostra
POST .../external-login(nãosignin-azure). - [x] Após login, chamadas às APIs levam header
Authorization: Bearer <jwt_ecosif>.
Referências
| Documento | Conteúdo |
|---|---|
| ../dev/autenticacao_unificada_mvp.md | Visão geral MVP1–4 |
| gateway_jwt_ecosif.md | Modo A — JWT ECOSIF no gateway |
| gateway_access_token_entra.md | Modo B — access token Microsoft |
| gateway_access_token_google.md | Modo C — token Google |
| external-login-api.md | Contrato HTTP external-login |
| external-login-backend.md | Implementação Fase 2 (validators, testes) |
.env-dev |
Ambiente CRU válido (local + Azure simples) |
env.template |
Template vazio com defaults documentados |