Google OAuth redirect_uri_mismatch na instância de staging — produção funciona bem com o mesmo app OAuth

<n8n versão: 2.20.7
Banco de dados: SQLite (padrão)
Executando via: Docker (auto-hospedado, Ubuntu 24.04 no DigitalOcean)
Proxy reverso: nginx com SSL via Certbot/Let’s Encrypt
Problema:
Tenho duas instâncias de n8n auto-hospedadas:
Produção: n8n.revvittsystems.com — OAuth do Gmail funciona perfeitamente, incluindo criação de credenciais novas
Staging: staging.revvittsystems.com — OAuth do Gmail falha com Erro 400: redirect_uri_mismatch todas as vezes
Ambas as instâncias executam n8n 2.20.7 no Docker com proxy reverso nginx. Ambas usam o mesmo app OAuth do Google Cloud (mesmo Client ID/Secret). Também tentei criar um cliente OAuth completamente separado apenas com o redirect URI de staging — mesmo erro.
O que confirmei:
O redirect URI mostrado na interface de staging do n8n é https://staging.revvittsystems.com/rest/oauth2-credential/callback
Este URI exato está registrado no Console do Google Cloud em URIs de redirecionamento autorizadas
Decodifiquei a URL de erro do Google e confirmei que o redirect_uri que o n8n envia é https://staging.revvittsystems.com/rest/oauth2-credential/callback — corresponde exatamente
X-Forwarded-Proto $scheme está definido no nginx para que o n8n gere corretamente o prefixo https://
App é publicado na Produção na tela de consentimento do OAuth do Google
Testado em janela anônima — mesmo erro
Criar uma nova credencial na produção funciona imediatamente — o próprio app OAuth do Google é funcionável
Criar um cliente OAuth separado e novo apenas para staging também falha com o mesmo erro
.env de Staging:
N8N_HOST=staging.revvittsystems.com
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://staging.revvittsystems.com/
N8N_EDITOR_BASE_URL=https://staging.revvittsystems.com
GENERIC_TIMEZONE=America/New_York
Config do nginx de Staging:
server {
listen 443 ssl;
server_name staging.revvittsystems.com;
ssl_certificate /etc/letsencrypt/live/staging.revvittsystems.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/staging.revvittsystems.com/privkey.pem;
large_client_header_buffers 4 16k;
location / {
proxy_pass http://localhost:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_buffer_size 16k;
proxy_buffers 4 16k;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Observação adicional: Quando logado como proprietário/conta de administrador no staging, clicar em “Entrar com o Google” resulta em um erro 414 URI Too Long (bug conhecido do n8n em que escopos de administrador são anexados à URL). Criar a partir de uma conta de membro não-administrador passa do 414 mas bate no redirect_uri_mismatch.
Pergunta: O que mais poderia causar redirect_uri_mismatch quando o URI é confirmado correto e corresponde exatamente? Há algo específico sobre o fluxo OAuth do n8n 2.20.7 que pudesse causar isso em uma instância nova?!-- Ei! A forma mais rápida de encontrar soluções é usando a função :magnifying_glass_tilted_right: busca no canto superior direito.
Se sua pergunta não foi feita antes, siga o modelo abaixo. Pule as perguntas que não são relevantes para você.
:brazil: :france: :south_korea: :germany: Você pode postar em qualquer idioma - vamos traduzir sua postagem para você!

Descreva o problema/erro/pergunta

Qual é a mensagem de erro (se houver)?

Compartilhe seu workflow

(Selecione os nós na sua tela e use os atalhos de teclado CMD+C/CTRL+C e CMD+V/CTRL+V para copiar e colar o workflow.)

Compartilhe a saída retornada pelo último nó

Informações sobre sua configuração de n8n

  • Versão do n8n:
  • Banco de dados (padrão: SQLite):
  • Configuração EXECUTIONS_PROCESS do n8n (padrão: own, main):
  • Executando n8n via (Docker, npm, n8n cloud, aplicativo desktop):
  • Sistema operacional:

Oi @Sam_Rao, bem-vindo!
Acho que seu n8n_proxy_hops está desconfigurado ou não está configurado corretamente de acordo com sua instalação. Essa variável de ambiente deveria ficar assim:

N8N_HOST=staging.revvittsystems.com
N8N_PORT=5678
N8N_PROTOCOL=https
N8N_PROXY_HOPS=1
WEBHOOK_URL=https://staging.revvittsystems.com/
N8N_EDITOR_BASE_URL=https://staging.revvittsystems.com/
GENERIC_TIMEZONE=America/New_York

e certifique-se de que sua configuração do Nginx também tenha essas coisas habilitadas:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;

Me avise como fica depois de dar um restart.

Olá @Sam_Rao

O erro de incompatibilidade de URI de redirecionamento que você está enfrentando na sua instância de staging é um obstáculo comum, mas frustrante, em implantações do n8n. Mesmo quando a URL parece idêntica, os servidores de autenticação do Google são extremamente rigorosos. O processo requer uma correspondência exata, caractere por caractere, entre o valor definido no seu Google Cloud Console e o valor que o n8n envia em sua solicitação. Se houver até mesmo uma única diferença de caractere, como uma barra invertida final ausente, a autenticação será rejeitada imediatamente.

Uma das causas mais frequentes para esse erro, especialmente após alterações de configuração, é o atraso de propagação global do Google. Mesmo se você tiver atualizado os URIs de Redirecionamento Autorizado no Google Cloud Console, essas alterações podem levar várias horas para se propagarem pela infraestrutura do Google. Se você modificou essas configurações recentemente, a solução mais provável é simplesmente aguardar algumas horas e tentar novamente, pois o sistema ainda pode estar usando a configuração antiga.

Também é vital verificar se as variáveis de ambiente dentro do seu container Docker correspondem às suas expectativas. Embora seu arquivo .env pareça correto, é possível que o processo n8n em execução tenha uma configuração diferente devido a cache ou à forma como o container foi inicializado. Executar um comando para imprimir as variáveis de ambiente de dentro do container ajudará você a confirmar que as configurações de WEBHOOK_URL e N8N_PROTOCOL estão corretamente aplicadas e não estão usando valores padrão internos e incorretos.

docker exec <container_id> env

Você também deve examinar sua configuração de Nginx em busca de possíveis conflitos. Embora suas configurações atuais sejam padrão, garanta que headers como X-Forwarded-Proto e X-Forwarded-Host estejam sendo passados corretamente sem serem sobrescritos por outros serviços. Se você está usando camadas adicionais como Cloudflare, verifique se não estão modificando ou removendo esses headers antes de chegarem ao seu proxy reverso Nginx, pois isso impediria o n8n de gerar a URL de redirecionamento segura apropriada.

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;

Com relação à configuração do Google Cloud Console, garanta que a tela de consentimento OAuth do seu projeto esteja devidamente configurada para o ambiente de staging. Se seu app está atualmente em fase de testes, você deve adicionar explicitamente qualquer conta que esteja usando para testes à lista de “Usuários de Teste” dentro do console. Além disso, garanta que as configurações do projeto não tenham restrições de domínio que possam estar causando o domínio de staging ser tratado diferentemente do seu ambiente de produção.

Finalmente, o erro 414 encontrado pela sua conta de administrador indica que a URL OAuth gerada está excedendo os limites típicos de caracteres. Este é um problema conhecido causado pelo acúmulo de escopos e dados de estado. Completar com sucesso a autenticação com uma conta que não é de administrador é a melhor maneira de contornar isso, pois permite que o handshake inicial ocorra e estabelece os cookies de sessão necessários para futuras interações. Comparar os parâmetros da URL gerada lado a lado com sua configuração de console continua sendo a forma mais definitiva de identificar qualquer discrepância oculta.

oi Anshul!

Obrigado pela ajuda!


Apliquei as correções sugeridas — ainda estou recebendo redirect_uri_mismatch.

Alterações realizadas:

  • Adicionei N8N_PROXY_HOPS=1 ao .env (confirmado dentro do container via docker exec)

  • Adicionei X-Forwarded-For, X-Forwarded-Host, e X-Forwarded-Proto ao nginx

  • Reiniciei tanto o nginx quanto o container n8n

O env do container confirma que todas as variáveis estão corretas:

WEBHOOK_URL=https://staging.revvittsystems.com/
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://staging.revvittsystems.com
N8N_PROXY_HOPS=1
N8N_HOST=staging.revvittsystems.com

Os detalhes do erro do Google mostram:

redirect_uri=https://staging.revvittsystems.com/rest/oauth2-credential/callback

Isso corresponde exatamente ao que está registrado no Google Cloud Console. Também tentei criar um cliente OAuth completamente separado apenas com o redirect URI de staging — mesmo erro.

Criar uma nova credencial em produção (n8n.revvittsystems.com) funciona imediatamente com o mesmo app OAuth do Google. O problema é específico da instância de staging.

A credencial está sendo criada de uma conta não-admin/membro para evitar o bug 414 URI Too Long com contas admin.


Oi! Obrigado pela sua ajuda! Por favor, veja minha resposta para @Anshul_Namdev. Estou também incluindo aqui.

Oi Anshul!

Obrigado pela sua ajuda!


Apliquei as correções sugeridas — ainda estou recebendo redirect_uri_mismatch.

Mudanças realizadas:

  • Adicionei N8N_PROXY_HOPS=1 ao .env (confirmado dentro do container via docker exec)

  • Adicionei X-Forwarded-For, X-Forwarded-Host e X-Forwarded-Proto ao nginx

  • Reiniciei tanto o nginx quanto o container n8n

O env do container confirma que todas as variáveis estão corretas:

WEBHOOK_URL=https://staging.revvittsystems.com/
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://staging.revvittsystems.com
N8N_PROXY_HOPS=1
N8N_HOST=staging.revvittsystems.com

Os detalhes do erro do Google mostram:

redirect_uri=https://staging.revvittsystems.com/rest/oauth2-credential/callback

Isso corresponde exatamente ao que está registrado no Google Cloud Console. Também tentei criar um cliente OAuth completamente separado com apenas o redirect URI de staging — mesmo erro.

Criar uma nova credencial em produção (n8n.revvittsystems.com) funciona imediatamente com o mesmo app OAuth do Google. O problema é específico da instância de staging.

A credencial está sendo criada de uma conta não administrador/membro para evitar o bug 414 URI Too Long com contas de administrador.


Sam, como o Google está ecoando exatamente o callback de staging, separe o problema de geração de URL do problema do cliente OAuth. Verifique se o URI de redirecionamento de staging está no mesmo ID de cliente de aplicação web que o n8n está realmente usando na credencial de staging; ter o URI em um segundo cliente no mesmo projeto não ajudará se o n8n ainda enviar o primeiro client_id.

Próximo check determinístico: crie uma credencial de staging nova após uma atualização forçada, depois compare apenas os parâmetros de erro do Google removidos: sufixo client_id, redirect_uri, scope, access_type e prompt. Não publique o secret. Se o sufixo do client_id não for o cliente de staging que você espera, a discrepância está dentro do registro de credencial do n8n; se estiver correto, o problema está na configuração/propagação do cliente OAuth do Google ao invés do nginx.