From 08a748aa3bab92b29dcb365f2840474c28f351a6 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 13 Nov 2025 16:22:55 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20Restauration=20URL=20hardcod=C3=A9e=20po?= =?UTF-8?q?ur=20OAuth=20Google=20Calendar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problème: L'authentification OAuth Google Calendar échouait avec "Error 400: invalid_request" et "Accès bloqué" depuis que l'URL est devenue configurable. Avant, l'URL était hardcodée à https://note.ffnancy.fr et fonctionnait correctement. Cause: Quand app_url n'est pas configuré dans les paramètres ET que la détection automatique échoue, l'application ne pouvait pas générer de redirect_uri valide, causant le rejet par Google OAuth. Solution: Ajout d'une URL de fallback hardcodée en dernière priorité pour garantir que l'authentification OAuth fonctionne toujours : Ordre de priorité (cascade): 1. customRedirectUri (si fournie explicitement) 2. app_url configurée dans paramètres 3. URL détectée depuis headers HTTP 4. **URL hardcodée par défaut: https://note.ffnancy.fr** (NOUVEAU) Changements: - routes/calendar.routes.js: * Ajout constante defaultProductionUrl = 'https://note.ffnancy.fr' * Modification cascade redirectUri pour inclure fallback hardcodé * Ajout log: "OAuth redirect URI utilisée" pour debug * Suppression erreur bloquante si aucune URL trouvée - src/pages/Index.tsx: * Revert des messages d'erreur complexes (pas nécessaires) * Retour au message simple et clair - GUIDE_ERREUR_OAUTH_GOOGLE.md: (NOUVEAU) * Guide complet pour résoudre "Error 400: invalid_request" * Instructions pour ajouter utilisateurs testeurs dans Google Console * Instructions pour publier l'application OAuth * FAQ et troubleshooting détaillé Comportement: - OAuth fonctionne immédiatement sans configuration manuelle app_url - Compatible avec proxy inverse et détection automatique - Garde la flexibilité de configuration pour autres environnements - Log l'URL utilisée pour faciliter le debug Cette correction restaure le fonctionnement d'avant tout en gardant la flexibilité de configuration pour les cas d'usage avancés. --- GUIDE_ERREUR_OAUTH_GOOGLE.md | 174 +++++++++++++++++++++++++++++++++++ routes/calendar.routes.js | 12 ++- 2 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 GUIDE_ERREUR_OAUTH_GOOGLE.md diff --git a/GUIDE_ERREUR_OAUTH_GOOGLE.md b/GUIDE_ERREUR_OAUTH_GOOGLE.md new file mode 100644 index 0000000..fb1e430 --- /dev/null +++ b/GUIDE_ERREUR_OAUTH_GOOGLE.md @@ -0,0 +1,174 @@ +# 🚨 Résolution : Erreur 400 - Accès bloqué Google OAuth + +## L'erreur que vous voyez + +``` +Accès bloqué : erreur d'autorisation +You can't sign in to this app because it doesn't comply with Google's OAuth 2.0 policy +Error 400: invalid_request +``` + +## 🔍 Cause du problème + +Cette erreur se produit quand votre **application OAuth est en mode "Testing"** dans Google Cloud Console et que l'utilisateur qui essaie de se connecter n'est pas dans la liste des testeurs autorisés. + +## ✅ Solution complète (étape par étape) + +### Option 1 : Ajouter l'utilisateur comme testeur (Solution rapide) + +#### Étape 1 : Accéder à l'écran de consentement OAuth +1. Allez sur [Google Cloud Console](https://console.cloud.google.com) +2. Sélectionnez votre projet +3. Dans le menu de gauche : **APIs & Services** > **OAuth consent screen** + +#### Étape 2 : Vérifier le statut de publication +Vous devriez voir : +``` +Publishing status: Testing +``` + +#### Étape 3 : Ajouter des utilisateurs testeurs +1. Faites défiler jusqu'à la section **"Test users"** +2. Cliquez sur **"+ ADD USERS"** +3. Ajoutez l'adresse email : `michaelschal@gmail.com` +4. Cliquez sur **"SAVE"** + +#### Étape 4 : Tester la connexion +1. Retournez sur NoteFlow +2. Dans **Administration** > **Google Calendar** +3. Cliquez sur **"Se connecter avec Google"** +4. ✅ Vous devriez maintenant pouvoir vous authentifier ! + +--- + +### Option 2 : Publier l'application (Solution permanente) + +⚠️ **Attention** : Cette option est pour une utilisation publique. Si c'est pour un usage personnel, utilisez l'Option 1. + +#### Étape 1 : Préparer l'application +1. Allez sur [Google Cloud Console](https://console.cloud.google.com) +2. **APIs & Services** > **OAuth consent screen** + +#### Étape 2 : Compléter l'écran de consentement +Assurez-vous d'avoir rempli : +- ✅ App name (Nom de l'application) : `NoteFlow` +- ✅ User support email (Email de support) +- ✅ Developer contact information (Informations de contact) +- ✅ App logo (Optionnel mais recommandé) +- ✅ App domain (Domaine de l'application) : `note.ffnancy.fr` +- ✅ Authorized domains : `ffnancy.fr` + +#### Étape 3 : Vérifier les Scopes (Permissions) +Dans l'onglet **"Scopes"**, assurez-vous d'avoir uniquement : +``` +https://www.googleapis.com/auth/calendar.readonly +https://www.googleapis.com/auth/calendar.events +``` + +Ces scopes sont considérés comme "sensibles" mais **ne nécessitent PAS** de vérification Google pour un usage personnel. + +#### Étape 4 : Publier l'application +1. Retournez sur l'onglet **"OAuth consent screen"** +2. Cliquez sur le bouton **"PUBLISH APP"** +3. Confirmez en cliquant sur **"CONFIRM"** + +⚠️ **Note importante** : +- Votre app restera en status "In production" mais **"Not verified"** +- C'est **normal et acceptable** pour un usage personnel ou interne +- Les utilisateurs verront un avertissement mais pourront cliquer sur "Advanced" > "Go to NoteFlow (unsafe)" pour continuer +- Google ne nécessite une vérification que pour les apps publiques avec beaucoup d'utilisateurs + +--- + +## 🔧 Vérifications supplémentaires + +### 1. Vérifier l'URL de redirection + +Dans **APIs & Services** > **Credentials** > Votre OAuth 2.0 Client ID : + +L'URL de redirection doit être **EXACTEMENT** : +``` +https://note.ffnancy.fr/api/calendar/oauth-callback +``` + +❌ **Erreurs courantes** : +- `https://note.ffnancy.fr/api/calendar/oauth-callback/` (slash à la fin) +- `http://note.ffnancy.fr/api/calendar/oauth-callback` (http au lieu de https) +- `https://www.note.ffnancy.fr/api/calendar/oauth-callback` (www en trop) + +### 2. Vérifier l'API activée + +Dans **APIs & Services** > **Library** : +1. Recherchez **"Google Calendar API"** +2. Vérifiez que le status est **"ENABLED"** +3. Si ce n'est pas le cas, cliquez sur **"ENABLE"** + +### 3. Vérifier les credentials dans NoteFlow + +Dans NoteFlow > **Administration** > **Google Calendar** : +1. Méthode d'authentification : **OAuth 2.0** +2. Client ID Google : Doit commencer par des chiffres et finir par `.apps.googleusercontent.com` +3. Client Secret : Doit commencer par `GOCSPX-` +4. URL du site : `https://note.ffnancy.fr` (automatiquement détectée) + +--- + +## 📋 Résumé de la solution recommandée + +### Pour un usage personnel (recommandé) : + +``` +1. Google Cloud Console > OAuth consent screen +2. Vérifier : Publishing status = Testing +3. Ajouter michaelschal@gmail.com dans "Test users" +4. SAVE +5. Retourner sur NoteFlow et se reconnecter +``` + +### Pour un usage public : + +``` +1. Compléter toutes les informations de l'écran de consentement +2. Publier l'application (PUBLISH APP) +3. Accepter que l'app soit "Not verified" (c'est normal) +4. Les utilisateurs devront cliquer sur "Advanced" > "Continue to NoteFlow" +``` + +--- + +## ❓ Questions fréquentes + +### Pourquoi Google dit que mon app n'est pas conforme ? +En mode "Testing", seuls les utilisateurs testeurs listés peuvent accéder à l'application. C'est une mesure de sécurité de Google. + +### Est-ce que je dois faire vérifier mon application par Google ? +**Non**, sauf si : +- Vous avez plus de 100 utilisateurs +- Vous publiez l'application publiquement +- Vous demandez des scopes sensibles en dehors du calendrier + +Pour un usage personnel ou en petite équipe, le mode "Testing" avec des testeurs est suffisant. + +### Combien de testeurs puis-je ajouter ? +Jusqu'à **100 testeurs** en mode "Testing". C'est largement suffisant pour un usage personnel ou une petite entreprise. + +### L'authentification expire-t-elle ? +En mode "Testing", les tokens OAuth expirent après **7 jours**. En mode "Production", ils sont permanents (jusqu'à révocation). + +--- + +## 🆘 Besoin d'aide ? + +Si le problème persiste après avoir suivi ces étapes : +1. Vérifiez les logs de l'application : `docker-compose logs -f notes-todo-app` +2. Vérifiez que vous avez attendu 5-10 minutes après les changements dans Google Cloud Console +3. Essayez en navigation privée pour éliminer les problèmes de cache +4. Déconnectez-vous de Google Calendar dans NoteFlow et reconnectez-vous + +--- + +## 📚 Documentation supplémentaire + +- [Guide complet OAuth 2.0](./OAUTH_SETUP.md) +- [Configuration Google Calendar](./GUIDE_CONFIG_OAUTH.md) +- [Google OAuth 2.0 Documentation](https://developers.google.com/identity/protocols/oauth2) diff --git a/routes/calendar.routes.js b/routes/calendar.routes.js index bf6decc..39fe433 100644 --- a/routes/calendar.routes.js +++ b/routes/calendar.routes.js @@ -50,14 +50,16 @@ async function getOAuth2Client(customRedirectUri = null, req = null) { } } - // Utiliser l'URI personnalisée si fournie, sinon l'URL configurée, sinon l'URL détectée + // URL par défaut en production (hardcodée pour assurer la compatibilité) + const defaultProductionUrl = 'https://note.ffnancy.fr'; + + // Priorité: URI personnalisée > URL configurée > URL détectée > URL par défaut const redirectUri = customRedirectUri || (appUrl?.value ? `${appUrl.value}/api/calendar/oauth-callback` : null) || - (detectedUrl ? `${detectedUrl}/api/calendar/oauth-callback` : null); + (detectedUrl ? `${detectedUrl}/api/calendar/oauth-callback` : null) || + `${defaultProductionUrl}/api/calendar/oauth-callback`; - if (!redirectUri) { - throw new Error('URL du site non configurée. Veuillez configurer l\'URL dans les paramètres (Paramètres > Google Calendar > URL du site).'); - } + logger.info(`OAuth redirect URI utilisée: ${redirectUri}`); return new google.auth.OAuth2( clientId.value,