Supabase Google Login - Allgemeine Einstellungen
Einen Einrichtungsvorschlag mit den Installationsanweisungen und der vollständigen Markdown-Guideline für diesen Plugin kopieren.
Einführung
Abschnitt mit dem Titel “Einführung”Diese Anleitung führt Sie durch die Integration von Google Sign-In mit Supabase-Authentifizierung mithilfe des Capacitor-Social-Login-Plugins. Diese Konfiguration ermöglicht es Ihnen, native Google Sign-In auf mobilen Plattformen zu verwenden, während Sie Supabase-Auth für die Backend-Authentifizierung nutzen.
Voraussetzungen
Abschnitt mit dem Titel “Voraussetzungen”Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
-
Die Anleitung zum "Google Login General Setup" gelesen haben Die Anleitung zum "Google Login General Setup" gelesen haben Die Plattform-spezifischen Anleitungen zum Einrichten der Google OAuth-Zertifikate für Ihre Zielplattform befolgt haben:
-
Android-Einrichtung
Aktivieren von Google OAuth-Anbieter in Supabase
Abschnitt mit dem Titel “Aktivieren von Google OAuth-Anbieter in Supabase”-
Gehe zu deinem Supabase-Dashboard
-
Klicke auf deinen Projekt
-
Gehe zum
AuthenticationMenü
-
Klicken Sie auf die
ProvidersRegisterkarte
-
Finden Sie den
GoogleAnbieter
-
Aktivieren Sie den Anbieter
-
Fügen Sie die Client-IDs für die Plattformen hinzu, die Sie verwenden möchten
-
Klicken Sie auf den
SaveButton
Voilà, Sie haben nun Google Sign-In mit Supabase-Authentifizierung aktiviert 🎉
Wie Google Sign-In mit Supabase-Authentifizierung-Hilfsprogramm funktioniert
Abschnitt mit dem Titel „Wie Google Sign-In mit Supabase-Authentifizierung-Hilfsprogramm funktioniert“In diesem Abschnitt wird erklärt, wie die Google-Sign-In-Integration mit Supabase unter der Haube funktioniert. Ein Verständnis dieses Flusses hilft Ihnen dabei, die Authentifizierungsprozess zu implementieren und zu überprüfen.
1. Nicht-Nonce-Generation
1. Nicht-Nonce-GenerationDie Implementierung generiert ein sicheres Zufallspaar, das den Anforderungen von Supabase entspricht. Supabase-Nonce-Anforderungen:
// 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 };}Fluss:
rawNonce: URL-sichere zufällige Zeichenkette (64 hex-Ziffern)nonceDigest: SHA-256-Hash vonrawNonce(hex-kodiert)nonceDigestwird an Google Sign-In übergeben → Google enthält den Zufallsdigest im ID-TokenrawNoncewird an Supabase übergeben → Supabase hashet die Rohzufallszahl und vergleicht sie mit dem Token-Nonce
2. Google Sign-In
Abschnitt mit dem Titel „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', // 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-Validierung
Abschnitt mit dem Titel „3. JWT-Validierung”Bevor der Token an Supabase gesendet wird, validiert die Implementierung den JWT-Token:
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 };}Warum vor Supabase validieren?
Die Validierung des JWT-Tokens vor dem Senden des Tokens an Supabase dient mehreren wichtigen Zwecken:
-
Ungültige Anfragen verhindern: Wenn der Token eine falsche Zielgruppe oder ein Nichtübereinstimmung von Nonce hat, wird Supabase den Token ohnehin ablehnen. Die Validierung zuerst vermeidet unnötige API Aufrufe und liefert klare Fehlermeldungen.
-
Token-Caching-Probleme: Auf einigen Plattformen (insbesondere iOS), kann Google Sign-In SDK Tokens für Leistungszwecke im Cache speichern. Wenn ein gecachter Token zurückgegeben wird, kann der gecachte Token möglicherweise mit einer anderen Nonce (oder ohne Nonce) generiert worden sein, was Supabase dazu veranlasst, den Token mit einem „Nichtübereinstimmung von Nonce“-Fehler abzulehnen. Durch die Validierung vor dem Senden an Supabase können wir dieses Problem frühzeitig erkennen und automatisch mit einem frischen Token erneut versuchen.
-
Sicherheit (iOS): Bei iOS wird die Validierung sicherstellen, dass der Token für Ihre spezifischen Google-Kunden-IDs erstellt wurde, um potenzielle Sicherheitsprobleme zu vermeiden, die durch den Einsatz von Tokens entstehen, die für andere Anwendungen bestimmt sind.
-
Bessere FehlerbehandlungDetecting issues before Supabase ermöglicht 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:
- Abmelden bei Google (löscht die gecacheten Tokens - kritisch bei iOS)
- Ermöglicht einmalige Wiederholung der Authentifizierung (zwingt eine frische Token-Generierung mit korrektem Nonce)
- Wenn auch die Wiederholung fehlschlägt, wird ein Fehler zurückgegeben
4. Supabase-Anmeldung
Abschnitt mit dem Titel „4. Supabase-Anmeldung“Schließlich wird der validierte Token an Supabase gesendet:
const { data, error } = await supabase.auth.signInWithIdToken({ provider: 'google', token: googleResponse.idToken, nonce: rawNonce, // Pass the raw (unhashed) nonce});Vollständige Code-Referenz
Abschnitt mit dem Titel “Vollständige Code-Referenz”Die vollständige Implementierung ist im Beispiel-App-Datei supabaseAuthUtils.ts verfügbar, die Folgendes enthält:
getUrlSafeNonce()- Erzeugt eine URL-sichere zufällige Noncesha256Hash()- Hashes eine Zeichenkette mit SHA-256getNonce()- Erzeugt eine Nonce-PaardecodeJWT()- Entschlüsselt JWT-TokenvalidateJWTToken()- Überprüft JWT-Zielgruppe und NonceauthenticateWithGoogleSupabase()- Hauptauthentifizierungs-Funktion mit automatischer Wiederholung
Zusätzliche Beispiel-Dateien
Abschnitt mit dem Titel “Zusätzliche Beispiel-Dateien”- SupabasePage.tsx - Beispielkomponente mit Umleitungsverwaltung (Web)
- SupabaseCreateAccountPage.tsx - Beispiel-Anmeldeseite
Weitere Schritte
Abschnitt mit dem Titel “Weitere Schritte”Bitte gehen Sie zur plattform-spezifischen Einrichtungsanleitung für Ihre Zielplattform:
Weitergehen von Supabase Google Login - Allgemeine Einrichtung
Abschnitt mit dem Titel “Weitergehen von Supabase Google Login - Allgemeine Einrichtung”Wenn Sie Authentifizierung und Kontoflows planen Supabase Google Login - Allgemeine Einstellungen um es mit Verwenden Sie @capgo/capacitor-social-login für die native Fähigkeit in Verwenden Sie @capgo/capacitor-social-login, Verwenden Sie @capgo/capacitor-social-login für die Implementierungsdetails in @capgo/capacitor-social-login, Verwenden Sie @capgo/capacitor-passkey für die Implementierungsdetails in @capgo/capacitor-passkey, Verwenden Sie @capgo/capacitor-native-biometric für die Implementierungsdetails in @capgo/capacitor-native-biometric, und Zwei-Faktor-Authentifizierung für die Implementierungsdetails in der Zwei-Faktor-Authentifizierung.