Configuration de base de Supabase Google - Login
Copiez un prompt de configuration avec les étapes d'installation et le guide Markdown complet pour ce plugin.
Introduction
Section intitulée « Introduction »Ce guide vous guidera dans l'intégration de l'authentification Google Sign-In avec l'authentification Supabase en utilisant le plugin Capacitor d'authentification sociale. Cette configuration vous permet d'utiliser l'authentification native Google Sign-In sur les plateformes mobiles tout en exploitant l'authentification Supabase pour l'authentification backend.
Prérequis
Section intitulée « Prérequis »Avant de commencer, assurez-vous d'avoir :
-
Lisez le Configuration de Google Login Générale guide pour configurer les clés d'authentification Google OAuth
-
Vous avez suivi les guides spécifiques à la plateforme pour configurer les clés d'authentification Google OAuth pour votre plateforme cible :
Activer le fournisseur d'authentification Google OAuth dans Supabase
Section intitulée “Activer le fournisseur d'authentification Google OAuth dans Supabase”-
Allez à votre Tableau de bord de Supabase
-
Cliquez sur votre projet
-
Allez à la
Authenticationmenu
-
Cliquez sur la
Providersonglet
-
Trouvez le
Googlefournisseur
-
Activer le fournisseur
-
Ajoutez les identifiants de client pour les plateformes que vous prévoyez d'utiliser
-
Cliquez sur le
Savebouton
Voilà, vous avez maintenant activé l'authentification Google avec Supabase !
Comment l'assistant d'authentification Google avec Supabase fonctionne
Cette section explique comment l'intégration de l'authentification Google avec Supabase fonctionne sous le capot. Comprendre ce flux vous aidera à mettre en œuvre et à dépanner le processus d'authentification.Implémentation complète
Section intitulée « 1. Génération de Nonce »
L'implémentation génère un paire de nonce sécurisée en suivant lesrequêtes de nonce de Supabase Copier dans le presse-papier:
// 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 };}Chaîne alphanumérique sécurisée (64 caractères hexadécimaux)
rawNonceHash SHA-256 denonceDigest__CAPGO_KEEP_0__rawNonce(codé en hex)nonceDigestest transmis à Google Sign-In → Google inclut le digest nonce dans le jeton IDrawNonceest transmis à Supabase → Supabase hache le nonce brut et le compare avec le nonce du jeton
2. Google Sign-In
Section intitulée « 2. Google Sign-In »La 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. Validation du JWT
Section intitulée « 3. Validation du 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);
// 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 Supabase ?
Valider le jeton JWT avant de l'envoyer à Supabase a plusieurs buts importants :
-
Prévenir les requêtes non valides: Si le jeton a une audience ou une non-ces incorrecte, Supabase rejette le jeton de toute façon. Valider d'abord évite les appels API inutiles et fournit des messages d'erreur plus clairs.
-
Problèmes de cache de jetons: Sur certaines plateformes (notamment iOS), Google Sign-In SDK peut stocker des jetons pour améliorer les performances. Lorsqu'un jeton stocké est retourné, le jeton stocké peut avoir été généré avec une non-ces différente (ou pas de non-ces du tout), ce qui fait que Supabase rejette le jeton avec un erreur de « non-ces incohérent ». En validant avant d'envoyer à Supabase, nous pouvons détecter ce problème tôt et réessayer automatiquement avec un jeton frais.
-
Sécurité (iOS) : La validation s'assure que le jeton a été émis pour vos identifiants de client Google spécifiques, prévenant ainsi 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 réessai automatique, essentielle pour gérer les problèmes de cache iOS de manière transparente.
Si la validation échoue, la fonction se déconnecte automatiquement de Google (efface les jetons stockés - critique sur iOS) et réessaye l'authentification une fois (force la génération d'un jeton frais avec la non-ces correcte)
- Prévenir les requêtes non valides
- Problèmes de cache de jetons
- Si la réessayer échoue également, retourne une erreur
4. Connexion à Supabase
Section intitulée “4. Connexion à Supabase”Finalement, le jeton 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 Code
Section intitulée “Référence complète Code”La mise en œuvre complète est disponible dans l' application d'exemple supabaseAuthUtils.ts fichier, qui comprend :
getUrlSafeNonce()- Génère un nonce aléatoire sécurisé pour URLsha256Hash()- Hache une chaîne avec SHA-256getNonce()- Génère un couple de noncedecodeJWT()- Décode le jeton JWTvalidateJWTToken()- Valide l'audience et la nonce JWTauthenticateWithGoogleSupabase()- Fonction d'authentification principale avec redémarrage automatique
Fichiers d'exemple supplémentaires
Section intitulée “Fichiers d'exemple supplémentaires”- SupabasePage.tsx - Exemple de composant avec gestion de redirection (Web)
- SupabaseCreateAccountPage.tsx - Exemple de page de création de compte
Étapes suivantes
Section intitulée “Étapes suivantes”Procédez ensuite à la configuration spécifique au plateforme pour votre plateforme cible :