Files
FamilyPlanner/docs/archive/README_OAUTH_GOOGLE.md
philippe fdd72c1135 Initial commit: Family Planner application
Complete family planning application with:
- React frontend with TypeScript
- Node.js/Express backend with TypeScript
- Python ingestion service for document processing
- Planning ingestion service with LLM integration
- Shared UI components and type definitions
- OAuth integration for calendar synchronization
- Comprehensive documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-14 10:43:33 +02:00

8.8 KiB

Configuration OAuth Google Calendar - RÉSUMÉ COMPLET

🎉 État actuel : OPÉRATIONNEL

Ce qui a été fait

  1. Client OAuth Google créé

    • Projet: familyplanner-474915
    • Client ID: 645971045469-1f9kliea9lqhutjeicim377fui2kdhc8.apps.googleusercontent.com
    • Client Secret: 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
    • État: Activé
  2. Fichier .env configuré

    • Credentials Google ajoutées
    • URIs de redirection configurées
    • Sécurisé via .gitignore
  3. Backend démarré avec succès

    Server ready on port 5000
    CORS: http://localhost:5173, http://localhost:5174, http://localhost:3000
    
  4. Correction erreur OAuth "response_type missing"

    • URL OAuth complète avec tous les paramètres requis
    • Fichier calendar.ts corrigé et placé au bon endroit

🧪 Test rapide de la configuration

Tester l'URL OAuth manuellement

Copiez cette URL dans votre navigateur :

https://accounts.google.com/o/oauth2/v2/auth?client_id=645971045469-1f9kliea9lqhutjeicim377fui2kdhc8.apps.googleusercontent.com&redirect_uri=http://localhost:5000/api/calendar/oauth/callback&response_type=code&scope=https://www.googleapis.com/auth/calendar.readonly%20https://www.googleapis.com/auth/calendar.events&state=test-state-123&access_type=offline&prompt=consent

Résultat attendu :

  • Page de connexion Google
  • Demande de consentement pour accéder au calendrier
  • ⚠️ Si erreur "Access blocked" : Ajoutez votre email en utilisateur de test (voir ci-dessous)

⚠️ ACTION REQUISE : Ajouter utilisateurs de test

Votre app est en mode "Testing", seuls les utilisateurs de test peuvent se connecter.

Étapes pour ajouter votre email

  1. Allez sur Google Cloud Console
  2. Sélectionnez le projet familyplanner-474915
  3. Menu APIs & Services > OAuth consent screen
  4. Section Test users
  5. Cliquez sur ADD USERS
  6. Ajoutez : phil.heyraud@gmail.com
  7. Cliquez sur SAVE

Sans cela, vous verrez l'erreur : "Access blocked: This app's request is invalid"


📁 Fichiers modifiés/créés

Fichiers de configuration

Fichier Statut Description
backend/.env Modifié Credentials Google ajoutées
backend/src/routes/calendar.ts Créé Routes OAuth avec URL complète
.gitignore Vérifié .env bien ignoré (ligne 4)

Documentation créée

Fichier Description
OAUTH_SETUP.md Guide complet configuration Google/Azure
OAUTH_CONFIGURATION_COMPLETE.md Détails de votre configuration + prochaines étapes
CORRECTIONS_OAUTH.md Analyse des corrections apportées
ANALYSE_CODE_CALENDAR.md Analyse sécurité/fiabilité/performance
README_OAUTH_GOOGLE.md Ce fichier (résumé)

🚀 Tester la connexion depuis l'application

1. Backend déjà démarré

Le backend tourne sur http://localhost:5000

2. Démarrer le frontend

cd frontend
npm run dev

3. Tester dans l'interface

  1. Ouvrez votre navigateur : http://localhost:5174
  2. Allez dans Paramètres ou Profil
  3. Section Agendas connectés
  4. Cliquez sur "Continuer avec Google"

Ce qui devrait se passer :

  1. Redirection vers accounts.google.com
  2. Page de connexion Google (si pas déjà connecté)
  3. Page de consentement demandant l'accès au calendrier
  4. Acceptation → Redirection vers l'app
  5. Calendrier connecté

Si erreur :

  • "Access blocked" → Ajoutez votre email en utilisateur de test
  • "redirect_uri_mismatch" → Vérifiez les URIs dans Google Console
  • "invalid_client" → Redémarrez le backend

📊 Ce qui fonctionne actuellement

OAuth Flow complet :

  • Génération URL OAuth avec tous les paramètres requis
  • Redirection vers Google
  • Page de consentement
  • Retour avec code d'autorisation

Ce qui reste à implémenter :

  • Échange du code d'autorisation contre un access token
  • Stockage sécurisé des tokens (chiffrement)
  • Récupération des événements du calendrier
  • Refresh automatique des tokens expirés
  • Synchronisation calendrier

🔐 Sécurité

Protections en place

  • .env dans .gitignore (secrets non versionnés)
  • Client secret stocké uniquement dans .env
  • CORS configuré pour limiter les origines autorisées

⚠️ À faire

  • Générer clé de chiffrement pour les tokens (TOKEN_ENCRYPTION_KEY)
  • Implémenter chiffrement AES-256-GCM des tokens
  • Migrer du stockage en mémoire vers une base de données
  • Ajouter middleware d'authentification sur les routes
  • Révoquer la clé OpenAI exposée dans Git

🔄 Prochaines étapes d'implémentation

Priorité 1 : Échange du code OAuth (1-2h)

Modifier backend/src/routes/calendar.ts ligne ~90 pour échanger le code contre un token :

// Après avoir reçu le code d'autorisation
const tokenResponse = await fetch("https://oauth2.googleapis.com/token", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    code: code,
    client_id: process.env.GOOGLE_CLIENT_ID,
    client_secret: process.env.GOOGLE_CLIENT_SECRET,
    redirect_uri: process.env.GOOGLE_REDIRECT_URI,
    grant_type: "authorization_code"
  })
});

const tokens = await tokenResponse.json();
// tokens.access_token, tokens.refresh_token, tokens.expires_in

Priorité 2 : Chiffrement des tokens (2-3h)

Créer backend/src/utils/encryption.ts avec fonctions encryptToken() et decryptToken().

Voir détails dans : OAUTH_CONFIGURATION_COMPLETE.md section 3

Priorité 3 : Récupération des événements (3-4h)

Créer backend/src/services/google-calendar.service.ts pour appeler l'API Google Calendar.

Voir détails dans : OAUTH_CONFIGURATION_COMPLETE.md section 4


📞 Résolution de problèmes

Erreur "Access blocked: This app's request is invalid"

Cause : Votre email n'est pas dans la liste des utilisateurs de test

Solution :

  1. Google Cloud Console > OAuth consent screen
  2. Ajoutez phil.heyraud@gmail.com en utilisateur de test

Erreur "redirect_uri_mismatch"

Cause : L'URI de redirection ne correspond pas exactement

Solution :

  1. Vérifiez dans Google Cloud Console > Credentials
  2. URIs autorisées doivent être exactement :
    • http://localhost:5000/api/calendar/oauth/callback
    • http://localhost:5174/calendar/oauth/callback
  3. Pas d'espace, pas de / à la fin, bon port

Erreur "invalid_client"

Cause : Client ID ou Secret incorrect

Solution :

  1. Vérifiez backend/.env :
    GOOGLE_CLIENT_ID=645971045469-1f9kliea9lqhutjeicim377fui2kdhc8.apps.googleusercontent.com
    GOOGLE_CLIENT_SECRET=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
    
  2. Redémarrez le backend : npm run dev

Backend ne démarre pas

Erreur : Cannot find module 'calendar'

Cause : Fichier calendar.ts manquant ou mal placé

Solution : Assurez-vous que ce fichier existe :

family-planner/backend/src/routes/calendar.ts

Si non, je peux le recréer.


🎓 Ressources utiles


Checklist complète

Configuration OAuth Google

  • Créer projet Google Cloud
  • Activer l'API Google Calendar
  • Créer credentials OAuth 2.0
  • Configurer URIs de redirection
  • Copier Client ID et Secret dans .env
  • Ajouter utilisateurs de test ⚠️ CRITIQUE
  • Tester l'URL OAuth manuellement

Code Backend

  • Corriger l'URL OAuth (ajouter response_type)
  • Placer calendar.ts au bon endroit
  • Démarrer le backend sans erreur
  • Implémenter échange code → token
  • Implémenter chiffrement tokens
  • Implémenter récupération événements
  • Implémenter refresh token

Sécurité

  • .env dans .gitignore
  • Générer TOKEN_ENCRYPTION_KEY
  • Chiffrer les tokens
  • Base de données pour tokens
  • Middleware authentification
  • Révoquer clé OpenAI exposée

🎉 Félicitations !

Votre configuration OAuth Google est fonctionnelle. Vous pouvez maintenant :

  1. Tester la connexion Google Calendar depuis votre app
  2. Implémenter la récupération des événements
  3. Sécuriser le stockage des tokens

Prochaine étape critique : Ajoutez votre email en utilisateur de test dans Google Cloud Console pour débloquer l'accès.


Date de configuration : 12 octobre 2025 Statut : Opérationnel (en mode test)