Connexion Google Supabase - Configuration générale
Introduction
Section titled “Introduction”Ce guide vous guidera dans l’intégration de la connexion Google avec l’authentification Supabase en utilisant le plugin Capacitor Social Login. Cette configuration vous permet d’utiliser la connexion Google native sur les plateformes mobiles tout en tirant parti de Supabase Auth pour l’authentification backend.
Prérequis
Section titled “Prérequis”Avant de commencer, assurez-vous d’avoir :
-
Lu le guide de configuration générale de connexion Google pour configurer les identifiants OAuth Google
-
Suivi les guides respectifs spécifiques à la plateforme pour configurer les identifiants OAuth Google pour votre plateforme cible :
Activation du fournisseur OAuth Google dans Supabase
Section titled “Activation du fournisseur OAuth Google dans Supabase”-
Allez sur votre Tableau de bord Supabase
-
Cliquez sur votre projet

-
Allez au menu
Authentication
-
Cliquez sur l’onglet
Providers
-
Trouvez le fournisseur
Google
-
Activez le fournisseur

-
Ajoutez les ID client pour les plateformes que vous prévoyez d’utiliser

-
Cliquez sur le bouton
Save
Voilà, vous avez maintenant activé la connexion Google avec l’authentification Supabase
Comment fonctionne l’assistant de connexion Google avec l’authentification Supabase
Section titled “Comment fonctionne l’assistant de connexion Google avec l’authentification Supabase”Cette section explique comment fonctionne l’intégration de la connexion Google avec Supabase sous le capot. Comprendre ce flux vous aidera à implémenter et dépanner le processus d’authentification.
1. Génération de nonce
Section titled “1. Génération de nonce”L’implémentation génère une paire de nonces sécurisés suivant les exigences de nonce de Supabase :
// Générer un nonce aléatoire sécurisé pour URLfunction getUrlSafeNonce(): string { const array = new Uint8Array(32); crypto.getRandomValues(array); return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');}
// Hacher le nonce avec SHA-256async function sha256Hash(message: string): Promise<string> { const encoder = new TextEncoder(); const data = encoder.encode(message); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');}
// Générer une paire de noncesasync function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> { const rawNonce = getUrlSafeNonce(); const nonceDigest = await sha256Hash(rawNonce); return { rawNonce, nonceDigest };}Flux :
rawNonce: Chaîne aléatoire sécurisée pour URL (64 caractères hexadécimaux)nonceDigest: Hash SHA-256 derawNonce(encodé en hexadécimal)nonceDigestest passé à Google Sign-In → Google inclut le digest du nonce dans le jeton IDrawNonceest passé à Supabase → Supabase hache le nonce brut et le compare avec le nonce du jeton
2. Connexion Google
Section titled “2. Connexion Google”La fonction initialise le plugin et se connecte avec Google :
await SocialLogin.initialize({ google: { webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // iOS uniquement : iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', mode: 'online', // Requis pour obtenir idToken },});
const response = await SocialLogin.login({ provider: 'google', options: { scopes: ['email', 'profile'], nonce: nonceDigest, // Passer le nonce haché SHA-256 },});3. Validation JWT
Section titled “3. Validation JWT”Avant d’envoyer le jeton à Supabase, l’implémentation valide le jeton JWT :
function validateJWTToken(idToken: string, expectedNonceDigest: string): { valid: boolean; error?: string } { const decodedToken = decodeJWT(idToken);
// Vérifier que l'audience correspond à vos ID client Google const audience = decodedToken.aud; if (!VALID_GOOGLE_CLIENT_IDS.includes(audience)) { return { valid: false, error: 'Audience invalide' }; }
// Vérifier que le nonce correspond const tokenNonce = decodedToken.nonce; if (tokenNonce && tokenNonce !== expectedNonceDigest) { return { valid: false, error: 'Inadéquation de nonce' }; }
return { valid: true };}Pourquoi valider avant Supabase ?
La validation du jeton JWT avant d’envoyer le jeton à Supabase sert plusieurs objectifs importants :
-
Prévenir les requêtes invalides : Si le jeton a une audience incorrecte ou une inadéquation de nonce, Supabase rejettera le jeton de toute façon. Valider en premier évite les appels API inutiles et fournit des messages d’erreur plus clairs.
-
Problèmes de mise en cache des jetons : Sur certaines plateformes (en particulier iOS), le SDK Google Sign-In peut mettre en cache les jetons pour des raisons de performance. Lorsqu’un jeton en cache est retourné, le jeton en cache peut avoir été généré avec un nonce différent (ou sans nonce du tout), provoquant le rejet du jeton par Supabase avec une erreur “inadéquation de nonce”. En validant avant d’envoyer à Supabase, nous pouvons détecter ce problème tôt et réessayer automatiquement avec un nouveau jeton.
-
Sécurité (iOS) : Sur iOS, la validation garantit que le jeton a été émis pour vos ID client Google spécifiques, empêchant les problèmes de sécurité potentiels liés à l’utilisation de jetons destinés à d’autres applications.
-
Meilleure gestion des erreurs : Détecter les problèmes avant Supabase permet une logique de nouvelle tentative automatique, ce qui est essentiel pour gérer les problèmes de mise en cache iOS de manière transparente.
Si la validation échoue, la fonction automatiquement :
- Se déconnecte de Google (efface les jetons en cache - critique sur iOS)
- Réessaie l’authentification une fois (force la génération d’un nouveau jeton avec le nonce correct)
- Si la nouvelle tentative échoue également, retourne une erreur
4. Connexion Supabase
Section titled “4. Connexion Supabase”Enfin, le jeton validé est envoyé à Supabase :
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Passer le nonce brut (non haché)});Référence complète du code
Section titled “Référence complète du code”L’implémentation complète est disponible dans le fichier supabaseAuthUtils.ts de l’application exemple, qui inclut :
getUrlSafeNonce()- Génère un nonce aléatoire sécurisé pour URLsha256Hash()- Hache une chaîne avec SHA-256getNonce()- Génère une paire de noncesdecodeJWT()- Décode un jeton JWTvalidateJWTToken()- Valide l’audience JWT et le nonceauthenticateWithGoogleSupabase()- Fonction d’authentification principale avec nouvelle tentative automatique
Fichiers d’exemple supplémentaires
Section titled “Fichiers d’exemple supplémentaires”- SupabasePage.tsx - Composant exemple avec gestion de redirection (Web)
- SupabaseCreateAccountPage.tsx - Page exemple de création de compte
Prochaines étapes
Section titled “Prochaines étapes”Veuillez procéder au guide de configuration spécifique à la plateforme pour votre plateforme cible :