Runbook — Google OAuth (Identity Services)

Guia operacional para DevOps e clientes que habilitam login Google no eCosif (MVP1 Modo A — ECOSIF_API_TOKEN_MODE=ECOSIF_JWT).

Público: administradores GCP, DevOps, integradores.
Pré-requisitos: domínio do SPA Angular publicado.


Visão geral do fluxo

Usuário → botão Google (Angular/GIS) → popup Google Identity Services → id_token (credential)
       → POST /api/auth/external-login { provider: "GOOGLE", token: "<id_token>" }
       → ecosif-auth valida JWKS Google → JWT ECOSIF
       → APIs /ecosif-* com Authorization: Bearer <JWT_ECOSIF>

Apenas um provedor externo por ambiente (ECOSIF_AUTH_PROVIDER=GOOGLE). Não combine Azure e Google no mesmo ambiente.


1. Criar projeto no Google Cloud

  1. Acesse console.cloud.google.com.
  2. Select a projectNew Project → nome ex.: eCosif Auth.
  3. Anote o Project ID (referência interna; não é variável eCosif).

Habilitar APIs (se solicitado)

Para login OIDC com GIS, normalmente não é necessário habilitar APIs adicionais além da configuração OAuth. Se o console exigir, habilite Google Identity Services.


  1. APIs & ServicesOAuth consent screen.
  2. User Type: - Internal — apenas usuários do Google Workspace da organização. - External — contas Gmail / domínios externos (requer verificação para produção).
  3. Preencha App name, User support email, Developer contact.
  4. Scopes: adicione apenas escopos OIDC básicos (openid, email, profile) — o GIS solicita id_token com esses claims.

3. Criar OAuth Client (Web application)

  1. APIs & ServicesCredentialsCreate CredentialsOAuth client ID.
  2. Application type: Web application.
  3. Name: eCosif SPA.
  4. Authorized JavaScript origins (obrigatório para GIS popup):
Ambiente Origem
Local http://localhost:8080
QAS https://qas.{cliente}.com.br
Produção https://app.{cliente}.com.br

Use origem sem path — apenas scheme + host + porta.

  1. Authorized redirect URIs: - Para modo popup (ECOSIF_GOOGLE_AUTH_MODE=popup): geralmente não é necessário URI de redirect adicional (GIS usa callback JS). - Para modo redirect (ECOSIF_GOOGLE_AUTH_MODE=redirect): adicione https://{dominio}/ e rotas de callback configuradas no Angular.

  2. Copie o Client IDECOSIF_GOOGLE_CLIENT_ID.

Não exponha o Client Secret no frontend — o fluxo GIS usa apenas o Client ID público.


4. Variáveis de ambiente eCosif

Angular (UI + GIS)

Variável Obrigatória Descrição
ECOSIF_ENABLE_GOOGLE_AUTH Sim true — exibe botão Google
ECOSIF_GOOGLE_CLIENT_ID Sim OAuth Client ID (Web)
ECOSIF_GOOGLE_AUTH_MODE Recomendado popup (padrão) ou redirect
ECOSIF_ENABLE_LOCAL_AUTH Opcional true/false — formulário local

Backend (ecosif-auth)

Variável Obrigatória Descrição
ECOSIF_AUTH_PROVIDER Sim GOOGLE
ECOSIF_GOOGLE_CLIENT_ID Sim Mesmo Client ID do SPA
ECOSIF_GOOGLE_EXPECTED_AUDIENCE Não Vazio = usa CLIENT_ID
ECOSIF_GOOGLE_EXPECTED_ISSUER Não Padrão https://accounts.google.com
ECOSIF_AUTH_AUTO_PROVISION Recomendado true
ECOSIF_AUTH_DEFAULT_TENANT Se auto-provision Ex.: TEMP_TENANT
ECOSIF_AUTH_DEFAULT_ROLE Se auto-provision Ex.: STAFF
ECOSIF_AUTH_DEFAULT_CREATED_BY Opcional Ex.: GOOGLE

Desabilitar Azure no mesmo ambiente

ECOSIF_ENABLE_AZURE_AUTH=false
ECOSIF_AUTH_PROVIDER=GOOGLE
ECOSIF_ENABLE_GOOGLE_AUTH=true

JWT compartilhado

Variável Descrição
AUTH_TOKEN_SECRET Mesmo valor em auth + microsserviços Java
ECOSIF_API_TOKEN_MODE ECOSIF_JWT

Exemplo mínimo:

ECOSIF_ENABLE_LOCAL_AUTH=true
ECOSIF_ENABLE_AZURE_AUTH=false
ECOSIF_ENABLE_GOOGLE_AUTH=true
ECOSIF_AUTH_PROVIDER=GOOGLE
ECOSIF_GOOGLE_CLIENT_ID=<oauth-client-id>.apps.googleusercontent.com
ECOSIF_GOOGLE_AUTH_MODE=popup
ECOSIF_GOOGLE_EXPECTED_ISSUER=https://accounts.google.com
ECOSIF_AUTH_AUTO_PROVISION=true
ECOSIF_API_TOKEN_MODE=ECOSIF_JWT

Catálogo completo: variaveis_autenticacao_baseline.md.


5. Deploy e validação

Subir ambiente

cd ecosif-structure
docker compose --env-file .env-dev build ecosif-auth ecosif-angular
docker compose --env-file .env-dev up -d

Checklist pós-deploy

Validar id_token

Claims esperados no id_token Google:

Claim Esperado
iss https://accounts.google.com ou accounts.google.com
aud ECOSIF_GOOGLE_CLIENT_ID
email E-mail do usuário
exp Não expirado

Teste com curl (token obtido do popup em homolog):

curl -s -X POST "https://{host}/ecosif-auth/api/auth/external-login" \
  -H "Content-Type: application/json" \
  -d '{"provider":"GOOGLE","token":"<id_token>","tokenType":"ID_TOKEN"}'

6. Problemas comuns

Sintoma Causa provável Correção
origin_mismatch / GIS não carrega Origem não autorizada Adicionar URL exata em Authorized JavaScript origins
Botão Google não aparece ECOSIF_ENABLE_GOOGLE_AUTH=false ou AUTH_PROVIDERGOOGLE Alinhar provider e flags no .env + rebuild Angular
401 em external-login aud inválido ou token expirado Conferir ECOSIF_GOOGLE_CLIENT_ID; novo login
Conflito Azure + Google Dois IdPs no mesmo ambiente MVP1 permite um provedor — desabilitar o outro
429 em external-login Rate limit Ver ECOSIF_AUTH_EXT_LOGIN_RL_*

7. Referências