Saltare al contenuto

Supabase Google Login - Configurazione generale

GitHub

Questa guida ti guiderà attraverso l'integrazione di Google Sign-In con l'autenticazione Supabase utilizzando il plugin di login sociale Capacitor.

Prima di iniziare, assicurati di avere:

  1. Creato un progetto Supabase

  2. Letto il Setup di Google Login Generale la guida per configurare le credenziali di autenticazione Google OAuth

  3. Seguito le guide specifiche per piattaforma per configurare le credenziali di autenticazione Google OAuth per la tua piattaforma di destinazione:

Abilita il provider di autenticazione Google in Supabase

Sezione intitolata “Abilita il provider di autenticazione Google in Supabase”
  1. Vai al tuo Pannello di controllo di Supabase

  2. Clicca sul tuo progetto

    Selettore dei progetti di Supabase
  3. Vai al Authentication menu

    Menu di autenticazione di Supabase
  4. Clicca sulla Providers scheda

    Scheda dei provider di Supabase
  5. Trova il Google provider

    Supabase Google Provider
  6. Abilita il provider

    Supabase Google Provider Abilita
  7. Aggiungi gli ID client per le piattaforme che intendi utilizzare

    Supabase Google Provider Aggiungi ID Client
  8. Clicca sul Save button

    Fornitore di Google Supabase Salva

Ecco, hai ora abilitato l'accesso con Google con l'autenticazione Supabase 🎉

Come funziona l'aiuto per l'accesso con Google con l'autenticazione Supabase Helper

Sezione intitolata “Come funziona l'aiuto per l'accesso con Google con l'autenticazione Supabase Helper”

Questa sezione spiega come funziona l'integrazione di Google Sign-In con Supabase sotto la pelle. Comprendere questo flusso ti aiuterà a implementare e risolvere i problemi di autenticazione.

Sezione intitolata “1. Generazione di Nonce”

L'implementazione genera un pair di nonce sicuro in base alle

richieste di nonce di Supabase Copia nel portapenne:

// Generate URL-safe random nonce
function 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-256
async 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 pair
async function getNonce(): Promise<{ rawNonce: string; nonceDigest: string }> {
const rawNonce = getUrlSafeNonce();
const nonceDigest = await sha256Hash(rawNonce);
return { rawNonce, nonceDigest };
}

__CAPGO_KEEP_0__

  • rawNonce: string di caratteri casuali sicuri per l'URL (64 caratteri esadecimali)
  • nonceDigest: calcolato tramite SHA-256 su rawNonce (codificato in esadecimale)
  • nonceDigest viene passato a Google Sign-In → Google include il digest nonce nel token ID
  • rawNonce viene passato a Supabase → Supabase calcola il nonce raw e lo confronta con il nonce del token

La funzione inizializza il plugin e si connette con 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
},
});

Prima di inviare il token a Supabase, l'implementazione valuta il token 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 };
}

Perché validare prima di Supabase?

La validazione del token JWT prima di inviare il token a Supabase serve diversi scopi importanti:

  1. Prevenire Richieste Non Valide: Se il token ha un'audience o un nonce errato, Supabase rifiuterà comunque il token. Validare prima evita chiamate API non necessarie e fornisce messaggi di errore più chiari.

  2. Issue di Cache dei Token: Su alcune piattaforme (soprattutto iOS), Google Sign-In SDK può memorizzare i token per prestazioni. Quando viene restituito un token memorizzato, il token memorizzato potrebbe essere stato generato con un diverso nonce (o nessun nonce), causando un errore di

  3. nonce mismatch da parte di Supabase. Validando prima di inviare a Supabase, possiamo rilevare questo problema in anticipo e riprovare automaticamente con un token fresco.

  4. Security(iOS): La validazione assicura che il token sia stato emesso per i tuoi ID Client Google specifici, prevenendo potenziali problemi di sicurezza da utilizzare token destinati ad altre applicazioni.

Manutenzione degli Errori Migliorata

  1. Esegue il logout da Google (cancella i token memorizzati - critico su iOS)
  2. Riprova l'autenticazione una volta (forza la generazione di un nuovo token con nonce corretto)
  3. Se anche il riprova fallisce, restituisce un errore

Infine, il token validato viene inviato a Supabase:

const { data, error } = await supabase.auth.signInWithIdToken({
provider: 'google',
token: googleResponse.idToken,
nonce: rawNonce, // Pass the raw (unhashed) nonce
});

L'implementazione completa è disponibile nell' esempio di applicazione supabaseAuthUtils.ts file, che include:

  • getUrlSafeNonce() - Genera un nonce casellario sicuro
  • sha256Hash() - Cifra la stringa con SHA-256
  • getNonce() - Genera coppia nonce
  • decodeJWT() - Decodifica token JWT
  • validateJWTToken() - Valida l'audience e il nonce JWT
  • authenticateWithGoogleSupabase() - Funzione di autenticazione principale con ritentativo automatico

Per favore procedi al guide di configurazione specifica per la tua piattaforma di destinazione:

Continua da Supabase Google Login - Configurazione generale

Sezione intitolata “Continua da Supabase Google Login - Configurazione generale”

Se stai utilizzando Supabase Google Login - Configurazione generale per pianificare l'autenticazione e le flussi di account, connettilo con Utilizzando @capgo/capacitor-login sociale For la capacità nativa in Utilizzare @capgo/capacitor-social-login, @capgo/capacitor-social-login Per il dettaglio di implementazione in @capgo/capacitor-social-login, @capgo/capacitor-passkey Per il dettaglio di implementazione in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric Per il dettaglio di implementazione in @capgo/capacitor-native-biometric, e Autenticazione a due fattori Per il dettaglio di implementazione in Autenticazione a due fattori.