Supabase Google Connexion - Configuration générale
##Présentation
Ce guide vous guidera dans l’intégration de la connexion Google avec l’authentification Supabase à l’aide du plugin de connexion sociale Capacitor. Cette configuration vous permet d’utiliser la connexion native Google sur les plates-formes 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 :
-
Lisez le guide Google Configuration générale de la connexion pour configurer les informations d’identification Google OAuth.
-
Suivez les guides spécifiques à la plate-forme respective pour configurer les informations d’identification Google OAuth pour votre plate-forme cible :
Avant de démarrer le didacticiel Supabase, vous devez générer les ID client pour les plates-formes que vous prévoyez d’utiliser. Vous les utiliserez à l’étape 7 de ce guide.
Activation du fournisseur Google OAuth dans Supabase
Section titled “Activation du fournisseur Google OAuth dans Supabase”-
Accédez à votre Supabase Tableau de bord
-
Cliquez sur votre projet

-
Allez dans le menu
Authentication
-
Cliquez sur l’onglet
Providers
-
Recherchez le fournisseur
Google
-
Activer le fournisseur

-
Ajoutez les identifiants client des plates-formes que vous prévoyez d’utiliser

Cela comprenait l’ID client Web, l’ID client iOS et l’ID client Android. Vous pouvez ignorer certains d’entre eux, en fonction des plates-formes que vous envisagez d’utiliser.
-
Cliquez sur le bouton
Save
Voilà, vous avez maintenant activé la connexion Google avec l’authentification Supabase 🎉
Comment fonctionne Google Connectez-vous avec Supabase Authentication Helper
Section titled “Comment fonctionne Google Connectez-vous avec Supabase Authentication Helper”Cette section explique comment l’intégration de Google Sign-In avec Supabase fonctionne sous le capot. Comprendre ce flux vous aidera à mettre en œuvre et à dépanner le processus d’authentification.
1. Génération de noms occasionnels
Section titled “1. Génération de noms occasionnels”L’implémentation génère une paire de noms occasionnels sécurisée suivant les Supabase exigences occasionnelles :
// Generate URL-safe random noncefunction getUrlSafeNonce(): string { const array = new Uint8Array(32); crypto.getRandomValues(array); return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');}
// Hash the nonce with 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('');}
// Generate nonce pairasync 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 les URL (64 caractères hexadécimaux)nonceDigest: hachage SHA-256 derawNonce(codé en hexadécimal)nonceDigestest transmis à Google Connexion → Google inclut le résumé occasionnel dans le jeton d’identificationrawNonceest transmis à Supabase → Supabase hache le nom occasionnel brut et le compare avec le nom occasionnel du jeton
2. Google ConnexionLa fonction initialise le plugin et se connecte avec Google :
Section titled “2. Google ConnexionLa fonction initialise le plugin et se connecte avec Google :”await SocialLogin.initialize({ google: { webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // iOS only: iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', mode: 'online', // Required to get idToken },});
const response = await SocialLogin.login({ provider: 'google', options: { scopes: ['email', 'profile'], nonce: nonceDigest, // Pass the SHA-256 hashed nonce },});3. JWT Validation
Section titled “3. JWT Validation”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);
// Check audience matches your Google Client IDs const audience = decodedToken.aud; if (!VALID_GOOGLE_CLIENT_IDS.includes(audience)) { return { valid: false, error: 'Invalid audience' }; }
// Check nonce matches const tokenNonce = decodedToken.nonce; if (tokenNonce && tokenNonce !== expectedNonceDigest) { return { valid: false, error: 'Nonce mismatch' }; }
return { valid: true };}Pourquoi valider avant le Supabase ?
La validation du jeton JWT avant de l’envoyer à Supabase répond à plusieurs objectifs importants :
-
Empêcher les demandes invalides : si le jeton a une audience incorrecte ou une non-concordance occasionnelle, Supabase rejettera le jeton de toute façon. La validation 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 plates-formes (en particulier iOS), Google Connexion SDK peut mettre en cache les jetons pour améliorer les performances. Lorsqu’un jeton mis en cache est renvoyé, le jeton mis en cache peut avoir été généré avec un nom occasionnel différent (ou aucun cas occasionnel), ce qui a amené Supabase à rejeter le jeton avec une erreur « non-concordance de nonce ». En validant avant d’envoyer à Supabase, nous pouvons détecter ce problème plus 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 ainsi les problèmes de sécurité potentiels liés à l’utilisation de jetons destinés à d’autres applications.
-
Meilleure gestion des erreurs : la détection des problèmes avant Supabase permet une logique de nouvelle tentative automatique, ce qui est essentiel pour gérer de manière transparente les problèmes de mise en cache iOS.
Si la validation échoue, la fonction automatiquement :
- Se déconnecte de Google (efface les jetons mis en cache - critique sur iOS)
- Réessaye l’authentification une fois (force la nouvelle génération de jeton avec le nom occasionnel correct)
- Si la nouvelle tentative échoue également, renvoie une erreur
4. Supabase Connexion
Section titled “4. Supabase Connexion”Enfin, le token validé est envoyé à Supabase :
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});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 exemple d’application supabaseAuthUtils.ts, qui comprend :
getUrlSafeNonce()- Génère un nom occasionnel aléatoire sécurisé pour les URLsha256Hash()- Chaîne de hachage avec SHA-256getNonce()- Génère une paire de noms occasionnelsdecodeJWT()- Décode le jeton JWTvalidateJWTToken()- Valide l’audience JWT et le nom occasionnelauthenticateWithGoogleSupabase()- Fonction d’authentification principale avec nouvelle tentative automatique
Exemples de fichiers supplémentaires
Section titled “Exemples de fichiers supplémentaires”- SupabasePage.tsx - Exemple de composant avec gestion des redirections (Web)
- SupabaseCreateAccountPage.tsx - Exemple de page de création de compte
Prochaines étapes
Section titled “Prochaines étapes”Veuillez passer au guide de configuration spécifique à votre plateforme cible :