Supabase Google Login - Allgemeine Einrichtung
Einführung
Section titled “Einführung”Dieser Leitfaden führt Sie durch die Integration von Google Sign-In mit Supabase Authentication unter Verwendung des Capacitor Social Login Plugins. Diese Einrichtung ermöglicht es Ihnen, natives Google Sign-In auf mobilen Plattformen zu verwenden, während Sie Supabase Auth für die Backend-Authentifizierung nutzen.
Voraussetzungen
Section titled “Voraussetzungen”Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
-
Den Google Login Allgemeinen Einrichtungsleitfaden gelesen haben, um Google OAuth-Anmeldedaten einzurichten
-
Die jeweiligen plattformspezifischen Leitfäden zur Einrichtung von Google OAuth-Anmeldedaten für Ihre Zielplattform befolgt haben:
Aktivierung des Google OAuth-Providers in Supabase
Section titled “Aktivierung des Google OAuth-Providers in Supabase”-
Gehen Sie zu Ihrem Supabase Dashboard
-
Klicken Sie auf Ihr Projekt

-
Gehen Sie zum
Authentication-Menü
-
Klicken Sie auf den
Providers-Tab
-
Finden Sie den
Google-Provider
-
Aktivieren Sie den Provider

-
Fügen Sie die Client-IDs für die Plattformen hinzu, die Sie verwenden möchten

-
Klicken Sie auf die
Save-Schaltfläche
Voilà, Sie haben jetzt Google Sign-In mit Supabase Authentication aktiviert!
Wie der Google Sign-In mit Supabase Authentication Helper funktioniert
Section titled “Wie der Google Sign-In mit Supabase Authentication Helper funktioniert”Dieser Abschnitt erklärt, wie die Google Sign-In-Integration mit Supabase unter der Haube funktioniert. Das Verständnis dieses Ablaufs hilft Ihnen, den Authentifizierungsprozess zu implementieren und Fehler zu beheben.
1. Nonce-Generierung
Section titled “1. Nonce-Generierung”Die Implementierung generiert ein sicheres Nonce-Paar gemäß den Supabase Nonce-Anforderungen:
// URL-sichere Zufalls-Nonce generierenfunction getUrlSafeNonce(): string { const array = new Uint8Array(32); crypto.getRandomValues(array); return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');}
// Nonce mit SHA-256 hashenasync 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('');}
// Nonce-Paar generierenasync function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> { const rawNonce = getUrlSafeNonce(); const nonceDigest = await sha256Hash(rawNonce); return { rawNonce, nonceDigest };}Ablauf:
rawNonce: URL-sichere Zufallszeichenkette (64 Hex-Zeichen)nonceDigest: SHA-256-Hash vonrawNonce(hex-codiert)nonceDigestwird an Google Sign-In übergeben → Google fügt den Nonce-Digest in das ID-Token einrawNoncewird an Supabase übergeben → Supabase hasht die rohe Nonce und vergleicht sie mit der Nonce des Tokens
2. Google Sign-In
Section titled “2. Google Sign-In”Die Funktion initialisiert das Plugin und meldet sich bei Google an:
await SocialLogin.initialize({ google: { webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // Nur iOS: iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com', mode: 'online', // Erforderlich, um idToken zu erhalten },});
const response = await SocialLogin.login({ provider: 'google', options: { scopes: ['email', 'profile'], nonce: nonceDigest, // SHA-256-gehashte Nonce übergeben },});3. JWT-Validierung
Section titled “3. JWT-Validierung”Vor dem Senden des Tokens an Supabase validiert die Implementierung das JWT-Token:
function validateJWTToken(idToken: string, expectedNonceDigest: string): { valid: boolean; error?: string } { const decodedToken = decodeJWT(idToken);
// Überprüfen, ob das Publikum mit Ihren Google Client IDs übereinstimmt const audience = decodedToken.aud; if (!VALID_GOOGLE_CLIENT_IDS.includes(audience)) { return { valid: false, error: 'Invalid audience' }; }
// Nonce-Übereinstimmung prüfen const tokenNonce = decodedToken.nonce; if (tokenNonce && tokenNonce !== expectedNonceDigest) { return { valid: false, error: 'Nonce mismatch' }; }
return { valid: true };}Warum vor Supabase validieren?
Die Validierung des JWT-Tokens vor dem Senden an Supabase dient mehreren wichtigen Zwecken:
-
Ungültige Anfragen verhindern: Wenn das Token ein falsches Publikum oder eine Nonce-Fehlanpassung hat, wird Supabase das Token ohnehin ablehnen. Eine vorherige Validierung vermeidet unnötige API-Aufrufe und bietet klarere Fehlermeldungen.
-
Token-Caching-Probleme: Auf einigen Plattformen (insbesondere iOS) kann das Google Sign-In SDK Tokens aus Leistungsgründen zwischenspeichern. Wenn ein zwischengespeichertes Token zurückgegeben wird, wurde das Token möglicherweise mit einer anderen Nonce (oder ohne Nonce) generiert, was dazu führt, dass Supabase das Token mit einem “Nonce mismatch”-Fehler ablehnt. Durch Validierung vor dem Senden an Supabase können wir dieses Problem frühzeitig erkennen und automatisch mit einem frischen Token wiederholen.
-
Sicherheit (iOS): Auf iOS stellt die Validierung sicher, dass das Token für Ihre spezifischen Google Client IDs ausgestellt wurde, wodurch potenzielle Sicherheitsprobleme durch die Verwendung von Tokens verhindert werden, die für andere Anwendungen bestimmt sind.
-
Bessere Fehlerbehandlung: Das frühzeitige Erkennen von Problemen vor Supabase ermöglicht eine automatische Wiederholungslogik, die für die transparente Behandlung von iOS-Caching-Problemen unerlässlich ist.
Wenn die Validierung fehlschlägt, führt die Funktion automatisch Folgendes aus:
- Meldet sich von Google ab (löscht zwischengespeicherte Tokens - kritisch auf iOS)
- Wiederholt die Authentifizierung einmal (erzwingt Generierung eines frischen Tokens mit korrekter Nonce)
- Wenn die Wiederholung ebenfalls fehlschlägt, wird ein Fehler zurückgegeben
4. Supabase-Anmeldung
Section titled “4. Supabase-Anmeldung”Schließlich wird das validierte Token an Supabase gesendet:
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Rohe (ungehashte) Nonce übergeben});Vollständige Code-Referenz
Section titled “Vollständige Code-Referenz”Die vollständige Implementierung ist in der Datei supabaseAuthUtils.ts der Beispiel-App verfügbar, die Folgendes umfasst:
getUrlSafeNonce()- Generiert URL-sichere Zufalls-Noncesha256Hash()- Hasht String mit SHA-256getNonce()- Generiert Nonce-PaardecodeJWT()- Dekodiert JWT-TokenvalidateJWTToken()- Validiert JWT-Publikum und NonceauthenticateWithGoogleSupabase()- Haupt-Authentifizierungsfunktion mit automatischer Wiederholung
Zusätzliche Beispieldateien
Section titled “Zusätzliche Beispieldateien”- SupabasePage.tsx - Beispielkomponente mit Redirect-Handling (Web)
- SupabaseCreateAccountPage.tsx - Beispiel-Kontoerstellungsseite
Nächste Schritte
Section titled “Nächste Schritte”Fahren Sie bitte mit dem plattformspezifischen Einrichtungsleitfaden für Ihre Zielplattform fort: