Google OAuth redirect_uri_mismatch sur l'instance de staging — la production fonctionne correctement avec la même application OAuth

<n8n version: 2.20.7
Base de données: SQLite (par défaut)
Exécuté via: Docker (auto-hébergé, Ubuntu 24.04 sur DigitalOcean)
Proxy inverse: nginx avec SSL via Certbot/Let’s Encrypt
Problème:
J’ai deux instances n8n auto-hébergées:
Production: n8n.revvittsystems.com — OAuth Gmail fonctionne parfaitement, y compris la création de nouvelles identifiants
Staging: staging.revvittsystems.com — OAuth Gmail échoue avec Erreur 400: redirect_uri_mismatch à chaque fois
Les deux instances exécutent n8n 2.20.7 sur Docker avec proxy inverse nginx. Les deux utilisent la même application OAuth Google Cloud (même ID client/Secret). J’ai également essayé de créer un client OAuth complètement séparé avec uniquement l’URI de redirection de staging — même erreur.
Ce que j’ai confirmé:
L’URI de redirection affiché dans l’interface de staging n8n est https://staging.revvittsystems.com/rest/oauth2-credential/callback
Cet URI exact est enregistré dans la console Google Cloud sous URIs de redirection autorisés
J’ai décodé l’URL d’erreur Google et confirmé que l’URI redirect_uri que n8n envoie est https://staging.revvittsystems.com/rest/oauth2-credential/callback — il correspond exactement
X-Forwarded-Proto $scheme est configuré dans nginx afin que n8n génère correctement le préfixe https://
L’application est publiée en Production sur l’écran de consentement OAuth Google
Testé en mode incognito — même erreur
La création d’une nouvelle identifiant en production fonctionne immédiatement — l’application OAuth Google elle-même fonctionne bien
La création d’un client OAuth complètement nouveau et séparé uniquement pour staging échoue également avec la même erreur
.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
Configuration 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;
}
}
Note supplémentaire: Lorsque je suis connecté en tant que propriétaire/administrateur sur staging, cliquer sur « Se connecter avec Google » donne une erreur 414 URI Trop long (bug connu de n8n où les portées admin sont ajoutées à l’URL). La création à partir d’un compte de membre non-administrateur dépasse l’erreur 414 mais atteint le redirect_uri_mismatch.
Question: Qu’est-ce qui d’autre pourrait causer redirect_uri_mismatch quand l’URI est confirmé correct et correspond exactement? Y a-t-il quelque chose de spécifique au flux OAuth de n8n 2.20.7 qui pourrait causer ceci sur une instance nouvelle?!-- Hé! Le moyen le plus rapide de trouver des solutions est d’utiliser la fonction :magnifying_glass_tilted_right: de recherche en haut à droite.
Si votre question n’a pas été posée auparavant, veuillez suivre le modèle ci-dessous. Ignorez les questions qui ne vous sont pas pertinentes.
:brazil: :france: :south_korea: :germany: Vous pouvez poster dans n’importe quelle langue - nous allons traduire votre message pour vous!

Décrivez le problème/l’erreur/la question

Quel est le message d’erreur (le cas échéant)?

Veuillez partager votre workflow

(Sélectionnez les nœuds sur votre canevas et utilisez les raccourcis clavier CMD+C/CTRL+C et CMD+V/CTRL+V pour copier et coller le workflow.)

Partagez la sortie retournée par le dernier nœud

Informations sur votre configuration n8n

  • Version n8n:
  • Base de données (par défaut: SQLite):
  • Paramètre n8n EXECUTIONS_PROCESS (par défaut: own, main):
  • Exécution n8n via (Docker, npm, n8n cloud, application de bureau):
  • Système d’exploitation:

Bonjour @Sam_Rao, bienvenue !
Je pense que ta variable n8n_proxy_hops n’est pas définie ou n’est pas configurée correctement selon ta configuration. Cette variable d’environnement devrait ressembler à ceci :

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

et assure-toi que ta configuration Nginx a également ces éléments activés :

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

Fais-moi savoir comment ça se passe après avoir redémarré.

Bonjour @Sam_Rao

L’erreur d’URI de redirection que vous rencontrez sur votre instance de staging est un obstacle courant mais frustrant dans les déploiements n8n. Même si l’URL semble identique, les serveurs d’authentification de Google sont extrêmement stricts. Le processus nécessite une correspondance exacte, caractère par caractère, entre la valeur définie dans votre Google Cloud Console et la valeur que n8n envoie dans sa requête. S’il existe ne serait-ce qu’une seule différence de caractère, comme une barre oblique finale manquante, l’authentification sera rejetée immédiatement.

L’une des causes les plus fréquentes de cette erreur, particulièrement après des modifications de configuration, est le délai de propagation mondiale de Google. Même si vous avez mis à jour les URI de redirection autorisés dans la Google Cloud Console, ces modifications peuvent prendre plusieurs heures pour se propager dans l’infrastructure de Google. Si vous avez récemment modifié ces paramètres, la solution la plus probable est simplement d’attendre quelques heures et de réessayer, car le système utilise peut-être encore l’ancienne configuration.

Il est également crucial de vérifier que les variables d’environnement à l’intérieur de votre conteneur Docker correspondent à vos attentes. Bien que votre fichier .env semble correct, il est possible que le processus n8n en cours d’exécution ait une configuration différente en raison de la mise en cache ou de la façon dont le conteneur a été initialisé. L’exécution d’une commande pour afficher les variables d’environnement depuis l’intérieur du conteneur vous aidera à confirmer que les paramètres WEBHOOK_URL et N8N_PROTOCOL sont correctement appliqués et ne prennent pas les valeurs par défaut incorrectes en interne.

docker exec <container_id> env

Vous devriez également examiner votre configuration Nginx pour d’éventuels conflits. Bien que vos paramètres actuels soient standards, assurez-vous que les en-têtes tels que X-Forwarded-Proto et X-Forwarded-Host sont correctement transmis sans être écrasés par d’autres services. Si vous utilisez des couches supplémentaires comme Cloudflare, vérifiez qu’elles ne modifient pas ou ne suppriment pas ces en-têtes avant qu’ils n’atteignent votre proxy inverse Nginx, car cela empêcherait n8n de générer l’URL de redirection sécurisée appropriée.

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

Concernant la configuration de la Google Cloud Console, assurez-vous que l’écran de consentement OAuth de votre projet est correctement configuré pour l’environnement de staging. Si votre application est actuellement en phase de test, vous devez explicitement ajouter tout compte que vous utilisez pour les tests à la liste « Test Users » (Utilisateurs de test) dans la console. De plus, assurez-vous que les paramètres du projet n’ont pas de restrictions de domaine qui pourraient faire que le domaine de staging soit traité différemment de votre environnement de production.

Enfin, l’erreur 414 rencontrée par votre compte administrateur indique que l’URL OAuth générée dépasse les limites de caractères habituelles. Il s’agit d’un problème connu causé par l’accumulation de portées et de données d’état. La réussite de l’authentification avec un compte non-administrateur est le meilleur moyen de contourner ce problème, car cela permet à la première tentative de connexion de se produire et établit les cookies de session nécessaires pour les futures interactions. La comparaison côte à côte des paramètres d’URL générés avec votre configuration de console reste le moyen le plus définitif d’identifier les divergences cachées.

Salut Anshul!

Merci pour ton aide!


J’ai appliqué les correctifs suggérés — toujours l’erreur redirect_uri_mismatch.

Modifications apportées:

  • Ajouté N8N_PROXY_HOPS=1 à .env (confirmé dans le conteneur via docker exec)

  • Ajouté X-Forwarded-For, X-Forwarded-Host, et X-Forwarded-Proto à nginx

  • Redémarré à la fois nginx et le conteneur n8n

L’env du conteneur confirme que toutes les variables sont correctes:

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

Les détails d’erreur de Google montrent:

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

Cela correspond exactement à ce qui est enregistré dans Google Cloud Console. J’ai aussi essayé de créer un client OAuth complètement séparé avec uniquement l’URI de redirection de staging — même erreur.

Créer une nouvelle credential en production (n8n.revvittsystems.com) fonctionne immédiatement avec la même application Google OAuth. Le problème est spécifique à l’instance de staging.

La credential est créée à partir d’un compte non-admin/membre pour éviter le bug 414 URI Too Long avec les comptes admin.


Salut ! Merci pour ton aide ! S’il te plaît, consulte ma réponse à @Anshul_Namdev. Je l’inclus également ici.

Salut Anshul !

Merci pour ton aide !


J’ai appliqué les correctifs suggérés — je reçois toujours redirect_uri_mismatch.

Modifications apportées :

  • Ajout de N8N_PROXY_HOPS=1 à .env (confirmé dans le conteneur via docker exec)

  • Ajout de X-Forwarded-For, X-Forwarded-Host et X-Forwarded-Proto à nginx

  • Redémarrage du conteneur nginx et n8n

L’env du conteneur confirme que toutes les variables sont correctes :

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

Les détails d’erreur de Google affichent :

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

Cela correspond exactement à ce qui est enregistré dans la Google Cloud Console. J’ai également essayé de créer un client OAuth complètement séparé avec uniquement l’URI de redirection de staging — même erreur.

La création d’une nouvelle credential en production (n8n.revvittsystems.com) fonctionne immédiatement avec la même application Google OAuth. Le problème est spécifique à l’instance de staging.

La credential est créée à partir d’un compte non-administrateur/membre pour éviter le bug « 414 URI Too Long » avec les comptes administrateurs.


Sam, puisque Google renvoie exactement le callback de staging, sépare le problème de génération d’URL du problème de client OAuth. Vérifie que l’URI de redirection de staging se trouve sur le même ID client d’application Web que celui qu’n8n utilise réellement dans les identifiants de staging ; avoir l’URI sur un deuxième client du même projet ne servira à rien si n8n envoie toujours le premier client_id.

Prochain contrôle déterministe : crée des identifiants de staging frais après un rafraîchissement complet, puis compare uniquement les paramètres d’erreur Google édités : suffixe du client_id, redirect_uri, scope, access_type et prompt. Ne poste pas le secret. Si le suffixe du client_id n’est pas le client de staging que tu attends, l’incohérence se trouve dans l’enregistrement des identifiants n8n ; s’il est correct, le problème vient de la configuration/propagation du client OAuth Google plutôt que de nginx.