Pular para conteúdo

Configurar login Google das views

Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-08-04

O que é

Habilita o login Google (Firebase) nas views server-rendered (/processamentos/**, /admin/**), restrito a emails @xadm.com.br. O desenho está em etapa 07; aqui é o procedimento de configuração. O /api/** (Bearer) não é afetado.

Quando usar

  • Subir um ambiente de produção (as views precisam das envs AUTH_*, senão ficam fail-closed em 503).
  • Apontar o app para um novo domínio público (precisa autorizar o domínio no Firebase).

Pré-requisitos

Reusa o projeto Firebase xadm-6ab81 (compartilhado entre apps X-Adm).

  1. Authorized domains — Firebase Console → Authentication → Settings → Authorized domains → adicionar o domínio do deploy (ex.: excel.vantroba.xadm.biz). Sem isso o popup do Google falha no navegador.
  2. Provider Google — já habilitado no xadm-6ab81; nada a fazer.
  3. AUTH_SESSION_SECRET — segredo HS256 exclusivo deste deploy, ≥32 chars: openssl rand -hex 32. Nunca reusar de outro deploy.

Não é necessário o firebase-admin-sdk.json: a validação do ID token usa só o JWKS público do Google (nimbus-jose-jwt).

Passos

Configurar as variáveis no Coolify:

Variável Obrigatória Padrão Descrição
AUTH_FIREBASE_PROJECT_ID sim — xadm-6ab81
AUTH_FIREBASE_API_KEY sim — Web API key (valor público)
AUTH_FIREBASE_AUTH_DOMAIN sim — xadm-6ab81.firebaseapp.com
AUTH_FIREBASE_APP_ID sim — Web App ID (valor público)
AUTH_SESSION_SECRET sim — segredo HS256 ≥32 chars, exclusivo
AUTH_SESSION_TTL_SECONDS não 28800 (8h) TTL do cookie
AUTH_COOKIE_SECURE não true Secure (true em prod HTTPS)
AUTH_XADM_EMAIL_DOMAIN não xadm.com.br domínio aceito
AUTH_ISSUER não bi-transporte-xls claim iss do xadm_session; o default fixo casa com as sessões existentes — só setar para forçar outro emissor

Os 4 AUTH_FIREBASE_* são públicos (vão no HTML da página de login por design do Firebase Web SDK). AUTH_SESSION_SECRET é o único segredo — nunca logado.

Verificação

  • Abrir uma view (/processamentos) → redireciona para /login → "Entrar com Google" → após login com conta @xadm.com.br, volta para a view com o email na navbar.
  • Conta fora do domínio → "Acesso restrito a emails @xadm.com.br" (esperado).

Reversão / comportamento sem as envs

Não há "desligar" explícito — o comportamento depende das envs e do ambiente:

Situação Comportamento
Envs AUTH_* completas filtro ativo (views exigem login)
Envs ausentes e ambiente dev/test bypass (views públicas, WARN no log)
Envs ausentes e produção fail-closed (503 em todas as views)

Sessão e segurança (caveats)

  • Sessão stateless (cookie xadm_session, JWT HS256 auto-contido): não há revogação server-side. O logout só expira o cookie no navegador; um token vazado vale até expirar. O TTL de 8h (AUTH_SESSION_TTL_SECONDS) limita essa janela.
  • Fluxo: view sem sessão → AuthFilter redireciona para /login?from=<path> → "Entrar com Google" → POST /login/callback (valida CSRF + ID token + domínio) → emite o cookie → volta pro from original.
  • CSRF: os forms POST de view carregam _csrf derivado da sessão; ausente/ divergente → 403. O enforcement só vale com auth ativo — em dev/test (bypass) o CSRF não é exigido.

Troubleshooting

Sintoma Causa / ação
Todas as views em 503 produção sem as 5 envs obrigatórias — configurar
Popup do Google falha (domínio) domínio do deploy não está em Authorized domains
Login OK mas volta sempre pro /login cookie não persistiu — checar AUTH_COOKIE_SECURE vs HTTPS
Bean falha no startup (secret curto) AUTH_SESSION_SECRET < 32 chars — gerar novo
Login intermitente com erro do Google JWKS do Google indisponível → o servidor responde 503 + Retry-After; tentar de novo