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 em503). - 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).
- 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. - Provider Google — já habilitado no
xadm-6ab81; nada a fazer. 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 →
AuthFilterredireciona para/login?from=<path>→ "Entrar com Google" →POST /login/callback(valida CSRF + ID token + domínio) → emite o cookie → volta profromoriginal. - CSRF: os forms POST de view carregam
_csrfderivado da sessão; ausente/ divergente →403. O enforcement só vale com auth ativo — emdev/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 |