Configuration générale de login Google de Supabase
Copiez un prompt de configuration avec les étapes d'installation et le guide Markdown complet pour ce plugin.
Introduction
Section intitulée « Introduction »Cet guide vous guidera pour intégrer l'authentification Google Sign-In avec Supabase Authentication à l'aide du plugin Capacitor Social Login. 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 :
-
Lis le Guide de configuration de l'authentification Google guide pour configurer les jetons d'accès OAuth Google
-
Suivi des guides spécifiques à la plateforme pour configurer les jetons d'accès OAuth Google pour votre plateforme cible :
Activer le fournisseur d'authentification Google dans Supabase
Section intitulée « Activer le fournisseur d'authentification Google dans Supabase »-
Allez à votre Tableau de bord Supabase
-
Cliquez sur votre projet
-
Allez à la section
Authenticationmenu
-
Cliquez sur la
Providerstab
-
Trouvez le
Googlefournisseur
-
Activez 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'inscription Google avec l'authentification Supabase 🎉
Fonctionnement de l'assistant d'inscription Google avec l'authentification Supabase
Section intitulée « Fonctionnement de l'assistant d'inscription Google avec l'authentification Supabase »Cette section explique comment l'intégration d'inscription Google 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 Nonce
Section intitulée “1. Génération de Nonce”La mise en œuvre génère un paire de nonce sécurisée en suivant les exigences de nonce de Supabase Supabase nonce requirements:
// 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 (64 caractères hexadécimaux)nonceDigest: Hachage SHA-256 derawNonce(codé en hexadécimal)nonceDigestest transmis à Google Sign-In → Google inclut le digest de nonce dans le jeton d'IDrawNonceest transmis à Supabase → Supabase hache le nonce brut et le compare avec le nonce du jeton
2. Google Sign-In
Section intitulée “2. Connexion avec Google”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, la mise en œuvre 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 ?
La validation du jeton JWT avant d'envoyer le jeton à Supabase sert plusieurs objectifs importants :
-
Prévenir les demandes non valides: Si le jeton a une audience incorrecte ou une erreur de nonce, Supabase rejettait le jeton de toute façon. La validation avant évite les appels inutiles API 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 un nonce différent (ou aucun nonce du tout), ce qui entraîne que Supabase rejette le jeton avec une erreur « non-matching nonce ». En validant avant d'envoyer à Supabase, nous pouvons détecter ce problème tôt et réessayer automatiquement avec un jeton frais.
-
Security (iOS) : Sur iOS, la validation s'assure que le jeton a été émis pour vos identifiants de client Google spécifiques, prévenant 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 réessai automatique, essentielle pour gérer les problèmes de stockage 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 (oblige la génération d'un jeton frais avec un nonce correct). Si la réessai échoue également, elle retourne une erreur.
- 4. Supabase Sign-In
- Enfin, le jeton validé est envoyé à Supabase :
- Section intitulée « 4. Supabase Sign-In »
Security
Meilleure Gestion des ErreursSi 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 (oblige la génération d'un jeton frais avec un nonce correct). Si la réessai échoue également, elle retourne une erreur.
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 le fichier de l'application d'exemple supabaseAuthUtils.ts qui comprend :
getUrlSafeNonce()- Génère un jeton aléatoire sécurisé pour URLsha256Hash()- Hache une chaîne avec SHA-256getNonce()- Génère un couple de jetonsdecodeJWT()- Décode un jeton JWTvalidateJWTToken()- Valide l'audience et le jeton 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 - Composant d'exemple avec gestion de redirection (Web)
- SupabaseCreateAccountPage.tsx - Page de création de compte d'exemple
Étapes suivantes
Section intitulée “Étapes suivantes”Veuillez procéder au guide de configuration spécifique à la plateforme pour votre plateforme cible :
Continuez de Supabase Google Login - Paramètres généraux
Section intitulée “Continuez de Supabase Google Login - Paramètres généraux”Si vous utilisez Supabase Google Login - Paramètres généraux pour planifier l'authentification et les flux de compte, connectez-le avec En utilisant @capgo/capacitor-connexion sociale pour la capacité native dans En utilisant @capgo/capacitor-connexion sociale, @capgo/capacitor-connexion sociale pour le détail d'implémentation dans @capgo/capacitor-connexion sociale, @capgo/capacitor-passkey pour le détail d'implémentation dans @capgo/capacitor-passkey, @capgo/capacitor-biométrie native pour les détails d'implémentation dans @capgo/capacitor-authentification native-biometrique, et Authentification à deux facteurs pour les détails d'implémentation dans Authentification à deux facteurs.