Esegui la migrazione da Google Identity Toolkit a Firebase Authentication

La versione più recente del Google Identity Toolkit è stata rilasciata come Firebase Authentication. In futuro, il lavoro di funzionalità di Identity Toolkit verrà bloccato e lo sviluppo di tutte le nuove funzionalità verrà eseguito su Firebase Authentication. Invitiamo gli sviluppatori di Identity Toolkit a passare a Firebase Authentication non appena sarà pratico per le loro applicazioni. Tuttavia, Identity Toolkit continua a funzionare e non verrà ritirato senza ulteriori annunci.

Nuove funzionalità

Firebase Authentication presenta già alcuni miglioramenti significativi alle funzionalità rispetto a Google Identity Toolkit:

  • Accesso a tutte le funzionalità di Firebase

    Firebase è una piattaforma mobile che ti consente di sviluppare rapidamente app di alta qualità, ampliare la tua base utenti e guadagnare di più. Firebase è costituito da funzionalità complementari che puoi combinare in base alle tue esigenze e include un'infrastruttura per: analisi per dispositivi mobili, cloud Messaging, database in tempo reale, archiviazione di file, hosting statico, configurazione remota, report sugli arresti anomali mobile e test di arresto anomalo per Android

  • UI aggiornate

    Abbiamo ricreato completamente i flussi dell'interfaccia utente sulla base delle ultime ricerche sull'UX di Google. Ciò include flussi di recupero della password, collegamento degli account, flussi di disambiguazione di account nuovi/esistenti che spesso richiedono molto tempo per la programmazione e il debug. Integra Smart Lock per password su Android, il che ha notevolmente migliorato la conversione di accessi e registrazioni per le app partecipanti. Supporta inoltre semplici modifiche dei temi da abbinare alla tua applicazione e, per la massima personalizzazione, le versioni per Android e iOS sono state rese open source.

  • Configurazione semplificata del server

    Abbiamo semplificato l'utilizzo di Firebase Authentication per gli sviluppatori. Con Identity Toolkit, abbiamo visto che molti sviluppatori hanno scelto di non implementare il flusso di recupero dell'email, il che rendeva impossibile per i propri utenti recuperare i loro account se dimenticavano la password. Firebase Authentication può inviare all'utente messaggi relativi a verifica email, reimpostazione della password e modifica della password. Il testo può essere facilmente personalizzato per gli utenti. Inoltre, non è più necessario ospitare i widget UI per l'hosting di reindirizzamenti e il completamento delle operazioni di modifica della password.

  • Nuova Console di amministrazione

    Firebase ha una nuova console per gli sviluppatori e la sezione Autenticazione ti consente di visualizzare, modificare ed eliminare gli utenti. Questo può essere di grande aiuto per eseguire il debug dei flussi di accesso e registrazione. La console consente inoltre di configurare metodi di autenticazione e personalizzare i modelli email.

  • Nuovi SDK

    Tutte le API server di Identity Toolkit sono ora disponibili in modo nativo con ciascuna delle nostre librerie client (Android, iOS, web). Gli sviluppatori potranno accedere e registrare utenti vecchi e nuovi, accedere alle proprietà utente, collegare, aggiornare ed eliminare account, reimpostare le password e altro ancora senza essere vincolati a un'interfaccia utente fissa. Se preferisci, puoi creare manualmente il tuo intero flusso di accesso e la tua esperienza utilizzando questa API.

  • Gestione delle sessioni per le app mobile

    Con Identity Toolkit, le app creavano il proprio stato della sessione in base all'evento di autenticazione iniziale di Identity Toolkit. Firebase Auth utilizza un servizio di backend che prende un token di aggiornamento, creato dall'evento di autenticazione, e lo scambia con token di accesso di un'ora per Android, iOS e JavaScript. Quando un utente cambia la password, i token di aggiornamento non saranno più in grado di generare nuovi token di accesso, disattivando così l'accesso finché l'utente non esegue nuovamente l'autenticazione sul dispositivo.

  • Autenticazione anonima e GitHub

    Firebase Authentication supporta due nuovi tipi di autenticazione: GitHub e anonima. L'accesso anonimo può essere utilizzato per creare un ID utente unico senza richiedere all'utente di eseguire alcuna procedura di accesso o di registrazione. Con un utente anonimo, ora puoi effettuare chiamate API autenticate come faresti con un utente normale. Quando l'utente decide di creare un account, tutte le attività vengono conservate con lo stesso ID utente. Questo è ottimo in situazioni come il carrello degli acquisti lato server o qualsiasi applicazione in cui vuoi coinvolgere l'utente prima di inviarlo attraverso un flusso di registrazione.

Differenze delle funzionalità

Alcune funzionalità di Identity Toolkit non sono attualmente disponibili in Firebase Authentication, mentre altre sono state riprogettate e funzionano in modo diverso. Potresti scegliere di non eseguire subito la migrazione se queste funzionalità sono importanti per la tua app. In molti casi, queste funzionalità potrebbero non essere importanti per la tua app o potrebbero esserci semplici elementi di riserva che ti consentiranno di procedere con la migrazione.

Differenze lato server

Il servizio Identity Toolkit principale, con le relative API REST sottostanti, la logica di convalida dell'account e il database degli utenti principali, sono stati sottoposti solo ad aggiornamenti di minore entità. Tuttavia, alcune funzionalità e il modo in cui hai integrato Firebase Authentication nel tuo servizio sono cambiati.

  • Provider di identità

    PayPal e AOL non sono supportati. Gli utenti con account da questi IdP possono comunque accedere alla tua applicazione con il flusso di recupero della password e impostare una password per il proprio account.

  • Librerie server

    Attualmente, sono disponibili SDK di amministrazione di Firebase per Java, Node.js, Python, Go e C#.

  • Email di gestione account

    I messaggi di reimpostazione della password, di verifica dell'email e di modifica dell'email possono essere eseguiti da Firebase o dal server di posta dello sviluppatore. Attualmente, i modelli email di Firebase offrono solo una personalizzazione limitata.

  • Conferma di modifica dell'indirizzo email

    In Identity Toolkit, quando un utente decide di cambiare il proprio indirizzo email, viene inviata un'email al nuovo indirizzo contenente un link per continuare la procedura di modifica dell'indirizzo email.

    Firebase conferma la modifica dell'indirizzo email inviando un'email di revoca al vecchio indirizzo email con un link per annullare la modifica.

  • Implementazione IdP

    Il toolkit di identità aveva la possibilità di aggiungere gradualmente i provider di identità al sistema di accesso per consentirti di sperimentare l'impatto sulle tue richieste di assistenza. Questa funzionalità è stata rimossa in Firebase Authentication.

Differenze lato client

In Firebase, le funzionalità fornite da Google Identity Toolkit sono suddivise in due componenti:

  • SDK Firebase Authentication

    In Firebase Authentication, la funzionalità fornita dall'API REST di Identity Toolkit è stata pacchettizzata in SDK client disponibili per Android, iOS e JavaScript. Puoi utilizzare l'SDK per eseguire l'accesso e registrare gli utenti, accedere alle informazioni dei profili degli utenti, collegare, aggiornare ed eliminare account e reimpostare le password utilizzando l'SDK del client, anziché comunicare con il servizio di backend tramite chiamate REST.

  • Autenticazione FirebaseUI

    Tutti i flussi UI che gestiscono l'accesso, la registrazione, il recupero della password e il collegamento dell'account sono stati ricostruiti utilizzando gli SDK Frebase Authentication. Sono disponibili come SDK open source per iOS e Android per consentirti di personalizzare completamente i flussi in modi non possibili con Identity Toolkit.

Ulteriori differenze includono:

  • Sessioni e migrazione

    Poiché le sessioni sono gestite in modo diverso in Identity Toolkit e Firebase Authentication, le sessioni esistenti degli utenti verranno terminate dopo l'upgrade dell'SDK e gli utenti dovranno accedere di nuovo.

Prima di iniziare

Prima di poter eseguire la migrazione da Identity Toolkit a Firebase Authentication,

  1. Apri la console Firebase, fai clic su Importa progetto Google e seleziona il progetto Identity Toolkit.

  2. Fai clic su > Autorizzazioni per aprire la pagina IAM e amministrazione.

  3. Apri la Account di servizio. Qui puoi vedere l'account di servizio che hai configurato in precedenza per Identity Toolkit.

  4. Accanto all'account di servizio, fai clic su > Crea chiave. Quindi, nella finestra di dialogo Crea chiave privata, imposta il tipo di chiave su JSON e fai clic su Crea. Verrà scaricato un file JSON contenente le credenziali del tuo account di servizio. Ti servirà per inizializzare l'SDK nel passaggio successivo.

  5. Torna alla Console Firebase. Nella sezione Auth, apri la pagina Email Templates (Modelli email). In questa pagina, personalizza i modelli email della tua app.

    In Identity Toolkit, quando gli utenti reimpostavano le password, modificavano gli indirizzi email e verificavano l'indirizzo email, dovevi ottenere un codice OOB dal server Identity Toolkit e quindi inviare il codice agli utenti via email. Firebase invia email in base ai modelli configurati da te senza bisogno di ulteriori azioni.

  6. Facoltativo: se devi accedere ai servizi Firebase sul tuo server, installa l'SDK Firebase.

    1. Puoi installare il modulo Node.js di Firebase con npm:

      $ npm init
      $ npm install --save firebase-admin
      
    2. Nel codice, puoi accedere a Firebase utilizzando:

      var admin = require('firebase-admin');
      var app = admin.initializeApp({
        credential: admin.credential.cert('path/to/serviceAccountCredentials.json')
      });
      

A questo punto, completa i passaggi di migrazione per la piattaforma della tua app: Android, iOS, web.

Server e JavaScript

Modifiche rilevanti

Esistono alcune altre differenze nell'implementazione web di Firebase da Identity Toolkit.

  • Gestione delle sessioni web

    In precedenza, quando un utente eseguiva l'autenticazione mediante il widget del toolkit di Identity, veniva impostato un cookie per l'utente che veniva utilizzato per eseguire il bootstrap della sessione. Questo cookie aveva una durata di due settimane ed è stato utilizzato per consentire all'utente di utilizzare il widget di gestione dell'account per modificare la password e l'indirizzo email. Alcuni siti hanno utilizzato questo cookie per autenticare tutte le altre richieste di pagina sul sito. Altri siti lo hanno usato per creare i propri cookie tramite il sistema di gestione dei cookie del proprio framework.

    Gli SDK client di Firebase ora gestiscono i token dell'ID Firebase e funzionano con il backend di Firebase Authentication per mantenere aggiornata la sessione. Il backend fa scadere le sessioni quando si verificano modifiche importanti all'account (ad esempio modifiche della password dell'utente). I token ID Firebase non vengono impostati automaticamente come cookie sul client web e hanno una durata di solo un'ora. A meno che tu non voglia sessioni di una sola ora, i token ID Firebase non sono adatti a essere utilizzati come cookie per convalidare tutte le richieste di pagina. Dovrai configurare un listener per l'accesso da parte dell'utente, per recuperare il token ID Firebase, convalidare il token e creare un cookie personale tramite il sistema di gestione dei cookie del framework.

    Dovrai impostare la durata della sessione del cookie in base alle esigenze di sicurezza della tua applicazione.

  • Flusso di accesso web

    In precedenza, gli utenti venivano reindirizzati a accountchooser.com quando veniva avviato l'accesso per scoprire quale identificatore l'utente voleva utilizzare. Il flusso della UI di Firebase Auth ora inizia con un elenco di metodi di accesso, inclusa un'opzione email che rimanda a accountchooser.com per il web e utilizza l'API hintRequest su Android. Inoltre, gli indirizzi email non sono più richiesti nell'UI di Firebase. In questo modo sarà più facile supportare gli utenti anonimi, gli utenti con autenticazione personalizzata o gli utenti di provider in cui gli indirizzi email non sono obbligatori.

  • Widget Gestione account

    Questo widget fornisce un'interfaccia utente in cui gli utenti possono modificare gli indirizzi email, cambiare le password o scollegare i propri account dai provider di identità. Attualmente è in fase di sviluppo.

  • Pulsante/widget di accesso

    Widget come il pulsante di accesso e la scheda utente non vengono più forniti. Possono essere creati molto facilmente utilizzando l'API Firebase Authentication.

  • Nessun signOutUrl

    Dovrai chiamare firebase.auth.signOut() e gestire il callback.

  • Nessun URL oobActionUrl

    L'invio di email viene ora gestito da Firebase e configurato nella console Firebase.

  • Personalizzazione CSS

    FirebaseUI utilizza lo stile Material Design Lite, che aggiunge dinamicamente animazioni di Material Design.

Passaggio 1: modifica il codice server

  1. Se il server si basa sul token Identity Toolkit (valido per due settimane) per gestire le sessioni utente web, devi convertire il server in modo che utilizzi il proprio cookie di sessione.

    1. Implementa un endpoint per la convalida del token ID Firebase e l'impostazione del cookie di sessione per l'utente. L'app client invia il token ID Firebase a questo endpoint.
    2. Se la richiesta in entrata contiene il tuo cookie di sessione, puoi considerare l'utente autenticato. In caso contrario, tratta la richiesta come non autenticata.
    3. Se non vuoi che nessuno dei tuoi utenti perda le sessioni di accesso esistenti, attendi due settimane affinché tutti i token di Identity Toolkit scadano oppure esegui anche la convalida del doppio token per l'applicazione web come descritto nel passaggio 3 di seguito.
  2. Successivamente, poiché i token Firebase sono diversi da quelli di Identity Toolkit, devi aggiornare la logica di convalida dei token. Installa l'SDK Firebase Server sul tuo server oppure, se utilizzi una lingua non supportata dall'SDK di Firebase Server, scarica una libreria di convalida dei token JWT per il tuo ambiente e convalida il token correttamente.

  3. Quando esegui per la prima volta gli aggiornamenti precedenti, potresti avere ancora percorsi di codice che si basano sui token Identity Toolkit. Se hai applicazioni per iOS o Android, gli utenti dovranno eseguire l'upgrade alla nuova versione dell'app affinché i nuovi percorsi del codice funzionino. Se non vuoi forzare gli utenti ad aggiornare l'app, puoi aggiungere un'altra logica di convalida del server che esamini il token e determina se deve utilizzare l'SDK Firebase o Identity Toolkit per convalidarlo. Se hai solo un'applicazione web, tutte le nuove richieste di autenticazione verranno trasferite a Firebase e, di conseguenza, devi utilizzare solo i metodi di verifica dei token Firebase.

Consulta la documentazione di riferimento dell'API web di Firebase.

Passaggio 2. Aggiornamento del codice HTML

  1. Aggiungi il codice di inizializzazione di Firebase alla tua app:

    1. Apri il progetto nella console di Firebase.
    2. Nella pagina Panoramica, fai clic su Aggiungi app e poi su Aggiungi Firebase all'app web. Viene visualizzato uno snippet di codice che inizializza Firebase.
    3. Copia e incolla lo snippet di inizializzazione nella tua pagina web.
  2. Aggiungi FirebaseUI Auth alla tua app:

    <script src="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.js"></script>
    <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.css" />
    <!-- *******************************************************************************************
       * TODO(DEVELOPER): Paste the initialization snippet from:
       * Firebase Console > Overview > Add Firebase to your web app. *
       ***************************************************************************************** -->
    <script type="text/javascript">
      // FirebaseUI config.
      var uiConfig = {
        'signInSuccessUrl': '<url-to-redirect-to-on-success>',
        'signInOptions': [
          // Leave the lines as is for the providers you want to offer your users.
          firebase.auth.GoogleAuthProvider.PROVIDER_ID,
          firebase.auth.FacebookAuthProvider.PROVIDER_ID,
          firebase.auth.TwitterAuthProvider.PROVIDER_ID,
          firebase.auth.GithubAuthProvider.PROVIDER_ID,
          firebase.auth.EmailAuthProvider.PROVIDER_ID
        ],
        // Terms of service url.
        'tosUrl': '<your-tos-url>',
      };
    
      // Initialize the FirebaseUI Widget using Firebase.
      var ui = new firebaseui.auth.AuthUI(firebase.auth());
      // The start method will wait until the DOM is loaded.
      ui.start('#firebaseui-auth-container', uiConfig);
    </script>
    
  3. Rimuovi l'SDK Identity Toolkit dalla tua app.

  4. Se hai fatto affidamento sul token ID del toolkit di Identity per la gestione delle sessioni, devi apportare le seguenti modifiche sul lato client:

    1. Dopo aver eseguito l'accesso con Firebase, ricevi un token ID Firebase chiamando firebase.auth().currentUser.getToken().

    2. Invia il token ID Firebase al server di backend, convalidalo ed emetti il tuo cookie di sessione.

      Non fare affidamento esclusivamente sul cookie di sessione quando esegui operazioni sensibili o invii richieste di modifica autenticate al tuo server. Dovrai fornire un'ulteriore protezione dalle richieste di falsificazione tra siti (CSRF).

      Se il tuo framework non fornisce la protezione CSRF, un modo per prevenire un attacco è ottenere un token ID Firebase per l'utente che ha eseguito l'accesso con getToken() e includere il token con ogni richiesta (per impostazione predefinita viene inviato anche il cookie di sessione). Devi convalidare il token utilizzando l'SDK del server Firebase oltre al controllo dei cookie di sessione completato dal framework di backend. In questo modo, sarà più difficile che gli attacchi CSRF abbiano esito positivo, poiché il token ID Firebase viene memorizzato solo utilizzando lo spazio di archiviazione web e mai in un cookie.

    3. I token di Identity Toolkit sono validi per due settimane. Ti consigliamo di continuare a emettere token delle ultime due settimane oppure di renderli più lunghi o più brevi in base ai requisiti di sicurezza della tua app. Quando un utente si disconnette, cancella il cookie di sessione.

Passaggio 3: aggiorna gli URL di reindirizzamento IdP

  1. Nella console Firebase, apri la sezione Autenticazione e fai clic sulla scheda Metodo di accesso.

  2. Per ogni provider di accesso federato supportato, segui questi passaggi:

    1. Fai clic sul nome del provider di accesso.
    2. Copia l'URI di reindirizzamento OAuth.
    3. Nella console per gli sviluppatori del provider di accesso, aggiorna l'URI di reindirizzamento OAuth.

Android

Passaggio 1: aggiungi Firebase alla tua app

  1. Apri la console Firebase e seleziona il progetto Identity Toolkit, che hai già importato.

  2. Nella pagina Panoramica, fai clic su Aggiungi app e poi su Aggiungi Firebase alla tua app Android. Nella finestra di dialogo Aggiungi Firebase, indica il nome del pacchetto dell'app e l'impronta digitale del certificato di firma, quindi fai clic su Aggiungi app. Il file di configurazione google-services.json viene scaricato sul computer.

  3. Copia il file di configurazione nella directory root del modulo dell'app per Android. Questo file di configurazione contiene informazioni sul progetto e sul client OAuth di Google.

  4. Nel file build.gradle a livello di progetto (<var>your-project</var>/build.gradle), specifica il nome del pacchetto dell'app nella sezione defaultConfig:

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. Sempre nel file build.gradle a livello di progetto, aggiungi una dipendenza per includere il plug-in google-services:

    buildscript {
     dependencies {
       // Add this line
       classpath 'com.google.gms:google-services:3.0.0'
     }
    }
    
  6. Nel file build.gradle a livello di app (<var>my-project</var>/<var>app-module</var>/build.gradle) della tua app, aggiungi in fondo la seguente riga per attivare il plug-in google-services:

    // Add to the bottom of the file
    apply plugin: 'com.google.gms.google-services'
    

    Il plug-in google-services utilizza il file google-services.json per configurare l'applicazione in modo che utilizzi Firebase.

  7. Sempre nel file build.gradle a livello di app, aggiungi la dipendenza Firebase Authentication:

    compile 'com.google.firebase:firebase-auth:22.3.1'
    compile 'com.google.android.gms:play-services-auth:21.0.0'
    

Passaggio 2: rimuovi l'SDK Identity Toolkit

  1. Rimuovi la configurazione di Identity Toolkit dal file AndroidManifest.xml. Queste informazioni vengono incluse nel file google-service.json e caricate dal plug-in google-services.
  2. Rimuovi l'SDK Identity Toolkit dalla tua app.

Passaggio 3: aggiungi FirebaseUI alla tua app

  1. Aggiungi FirebaseUI Auth alla tua app.

  2. Nella tua app, sostituisci le chiamate all'SDK di Identity Toolkit con chiamate a FirebaseUI.

iOS

Passaggio 1: aggiungi Firebase alla tua app

  1. Aggiungi l'SDK Firebase alla tua app eseguendo questi comandi:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Apri la console Firebase e seleziona il progetto Identity Toolkit, che hai già importato.

  3. Nella pagina Panoramica, fai clic su Aggiungi app e poi su Aggiungi Firebase alla tua app iOS. Nella finestra di dialogo Aggiungi Firebase, fornisci l'ID bundle dell'app e l'ID App Store, poi fai clic su Aggiungi app. Il file di configurazione GoogleService-Info.plist viene scaricato sul computer. Se nel progetto sono presenti più ID pacchetto, ogni ID pacchetto deve essere collegato nella console Firebase in modo che possa avere il proprio file GoogleService-Info.plist.

  4. Copia il file di configurazione nella directory principale del progetto Xcode e aggiungilo a tutti i target.

Passaggio 2: rimuovi l'SDK Identity Toolkit

  1. Rimuovi GoogleIdentityToolkit dal podfile dell'app.
  2. Esegui il comando pod install.

Passaggio 3: aggiungi FirebaseUI alla tua app

  1. Aggiungi FirebaseUI Auth alla tua app.

  2. Nella tua app, sostituisci le chiamate all'SDK di Identity Toolkit con chiamate a FirebaseUI.