Esegui la migrazione da Google Identity Toolkit alla piattaforma Identity di Google Cloud

La versione più recente di Google Identity Toolkit è stata rilasciata come Identity Platform e Firebase Authentication. In futuro, il lavoro sulle funzionalità di Identity Toolkit verrà bloccato; lo sviluppo di tutte le nuove funzionalità avverrà su Identity Platform e Firebase Authentication. Incoraggiamo gli sviluppatori del toolkit di identità a passare a queste piattaforme non appena è possibile per le loro applicazioni.

Nuove funzionalità

Identity Platform presenta già miglioramenti significativi delle funzionalità rispetto a Google Identity Toolkit:

  • Nuova Console di amministrazione

    Identity Platform dispone di una nuova console per gli sviluppatori che ti consente di visualizzare, modificare ed eliminare gli utenti. Può essere utile 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 metodi di autenticazione

    Identity Platform supporta gli standard di federazione aziendale, come SAML e OIDC, che ti consentono di scalare app e servizi SaaS. Identity Platform offre inoltre assistenza per provider come GitHub, Microsoft, Yahoo e altri ancora. Puoi utilizzare l'accesso anonimo per creare un ID utente univoco senza che l'utente debba eseguire alcun processo di accesso o di registrazione. In questo modo puoi effettuare chiamate API autenticate come faresti con un normale utente. Quando l'utente decide di creare un account, tutte le attività vengono conservate con lo stesso ID utente. Questa opzione è utile per scenari come i carrelli degli acquisti lato server o altre applicazioni in cui vuoi coinvolgere l'utente prima di inviarlo tramite un flusso di registrazione.

  • Scala in sicurezza con gli accordi sul livello del servizio e l'assistenza Cloud

    Identity Platform è basata su un'infrastruttura Google affidabile e fornisce accordi sul livello del servizio e assistenza da Google Cloud. Ciò significa che puoi scalare il tuo servizio in tutta sicurezza e fare affidamento su Google per fornire la resilienza, la disponibilità e la scalabilità di cui hai bisogno.

  • Accesso a tutte le funzionalità di Firebase

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

  • UI aggiornate

    Abbiamo riprogettato completamente i flussi dell'interfaccia utente sulla base delle ultime ricerche sull'UX di Google. Ciò include il recupero della password, il collegamento degli account, i flussi di disambiguazione degli 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 open source.

  • Configurazione semplificata del server

    Con Identity Toolkit, abbiamo visto che molti sviluppatori hanno scelto di non implementare il flusso di recupero dell'email, rendendo impossibile per i loro utenti recuperare i loro account se dimenticavano la password. Identity Platform può inviare all'utente messaggi relativi alla verifica email, alla reimpostazione della password e alla modifica della password e il testo può essere facilmente personalizzato per gli utenti. Inoltre, non è più necessario ospitare i widget UI per ospitare i reindirizzamenti e completare le operazioni di modifica delle password.

  • 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 una UI fissa. Se preferisci, puoi creare manualmente il tuo intero flusso di accesso e la tua esperienza su questa API.

  • Gestione delle sessioni per le app mobile

    Con Identity Toolkit, le app hanno creato il proprio stato della sessione in base all'evento di autenticazione iniziale di Identity Toolkit. Identity Platform utilizza un servizio di backend che prende un token di aggiornamento, estratto 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 quindi l'accesso fino a quando l'utente non si autentica nuovamente sul dispositivo.

Differenze di funzionalità

Alcune funzionalità di Identity Toolkit non sono attualmente disponibili in Identity Platform, mentre altre sono state riprogettate e funzionano in modo diverso. Potresti scegliere di non eseguire immediatamente 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 fallback che ti consentiranno di procedere con la migrazione.

Differenze lato server

Il servizio principale di Identity Toolkit, con le relative API REST, la logica di convalida dell'account e il database utente principale, hanno subito solo aggiornamenti di minore entità. Tuttavia, alcune funzionalità e il modo in cui esegui l'integrazione di Identity Platform nel 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 Admin per Java, Node.js, Python, Go e C#.

  • Email di gestione dell'account

    I messaggi di reimpostazione della password, di verifica email e di modifica dell'email possono essere eseguiti da Firebase o dal server di posta dello sviluppatore. Attualmente, i modelli email offrono solo una personalizzazione limitata dall'interfaccia utente, ma possono essere ulteriormente personalizzati con gli SDK Admin

  • Conferma di modifica dell'indirizzo email

    In Identity Toolkit, quando un utente decide di modificare il proprio indirizzo email, viene inviata un'email al nuovo indirizzo contenente un link per proseguire il flusso 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 di IdP

    Identity Toolkit ha consentito di aggiungere gradualmente provider di identità al sistema di accesso per consentirti di sperimentare l'impatto sulle richieste di assistenza. Questa funzionalità è stata rimossa in Firebase Authentication.

Differenze lato client

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

  • SDK client e server

    In Identity Platform, la funzionalità fornita dall'API REST di Identity Toolkit è stata pacchettizzata negli 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 utente, collegare, aggiornare ed eliminare gli account e reimpostare le password utilizzando l'SDK del client, anziché comunicare con il servizio di backend tramite chiamate REST.

  • Widget UI

    Tutti i flussi UI che gestiscono l'accesso, la registrazione, il recupero della password e il collegamento dell'account sono stati ricreati utilizzando gli SDK client e pacchettizzati come widget di accesso. Sono disponibili come SDK open source per iOS, Android e Web e consentono 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 Identity Platform, le sessioni esistenti dei tuoi utenti verranno terminate all'upgrade dell'SDK e gli utenti dovranno accedere di nuovo.

Prima di iniziare

Prima di poter eseguire la migrazione da Identity Toolkit a Identity Platform, devi:

  1. Apri la console Cloud e seleziona il tuo progetto Identity Toolkit.

  2. Da Marketplace, vai a Identity Platform e seleziona "Abilita Identity Platform"

  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. Viene scaricato un file JSON contenente le credenziali dell'account di servizio. Ti servirà nel passaggio successivo per inizializzare l'SDK.

  5. Torna a Cloud Console. Nella sezione Provider, all'interno del metodo di accesso "Email/password", apri la pagina Modelli email. Puoi quindi personalizzare i modelli dell'app.

    In Identity Toolkit, quando gli utenti reimpostano le password, cambiano gli indirizzi email o verificano i loro indirizzi email, dovevi ottenere un codice OOB dal server Identity Toolkit e quindi inviarlo agli utenti via email. Identity Platform invia email in base ai modelli configurati, senza richiedere ulteriori azioni.

  6. (Facoltativo) Se devi accedere ai servizi Identity Platform sul tuo server, installa l'SDK Firebase.

    1. Puoi installare l'SDK Admin di Node.js 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')
      });
      

Successivamente, completa la procedura di migrazione per la piattaforma della tua app: Android, iOS, web.

Server e JavaScript

Modifiche importanti

Esistono una serie di ulteriori differenze nell'implementazione web di Identity Platform da Identity Toolkit.

  • Gestione delle sessioni web

    In precedenza, quando un utente si autenticava utilizzando il widget del toolkit di identità, veniva impostato un cookie per l'utente che veniva utilizzato per avviare la sessione. Questo cookie aveva una durata di due settimane ed era utilizzato per consentire all'utente di usare 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 pagine sul sito. Altri siti lo hanno utilizzato per creare i propri cookie tramite il sistema di gestione dei cookie del proprio framework.

    Gli SDK client di Identity Platform ora gestiscono i token ID e funzionano con il backend di Identity Platform per mantenere aggiornata la sessione. Il backend scade le sessioni quando si verificano modifiche importanti all'account (come modifiche alla password utente). I token ID non vengono impostati automaticamente come cookie sul client web e hanno una durata massima di un'ora. A meno che tu non voglia sessioni di sole un'ora, i token ID non sono adatti a essere utilizzati come cookie per convalidare tutte le richieste di pagina. Dovrai impostare un listener per l'accesso dell'utente, recuperare il token Id, convalidare il token e creare il tuo cookie tramite il sistema di gestione dei cookie del tuo 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 conoscere l'identificatore che l'utente voleva utilizzare. Il flusso della UI di Identity Platform ora inizia con un elenco di metodi di accesso, inclusa un'opzione email che va a accountchooser.com per il web e utilizza l'API hintRequest su Android. Inoltre, gli indirizzi email non sono più obbligatori nella UI. In questo modo sarà più semplice supportare gli utenti anonimi, gli utenti con autorizzazione personalizzata o gli utenti di provider che non richiedono indirizzi email.

  • Widget di gestione dell'account

    Questo widget fornisce un'interfaccia utente in cui gli utenti possono modificare gli indirizzi email, cambiare la 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 create molto facilmente utilizzando l'API Firebase Authentication.

  • Nessun URL di disconnessione

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

  • Nessun oobActionUrl

    L'invio delle email viene ora gestito da Identity Platform e configurato nella console Firebase.

  • Personalizzazione CSS

    Il widget UI utilizza lo stile Material Design Lite, che aggiunge dinamicamente animazioni di Material Design.

Passaggio 1: modifica il codice del server

  1. Se il tuo 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 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, considera la richiesta non autenticata.
    3. Se non vuoi che uno dei tuoi utenti perda le sessioni di accesso esistenti, devi attendere due settimane affinché tutti i token del toolkit di Identity scadranno. In alternativa, esegui anche la convalida del doppio token per la tua applicazione web come descritto di seguito nel passaggio 3.
  2. Inoltre, poiché i token ID sono diversi da quelli del toolkit di Identity, devi aggiornare la logica di convalida dei token. Installa l'SDK Admin sul tuo server oppure, se utilizzi una lingua non supportata da SDK Admin, scarica una libreria di convalida dei token JWT per il tuo ambiente e convalida il token correttamente.

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

Consulta la documentazione di riferimento sulle API web.

Passaggio 2: aggiorna il codice HTML

  1. Aggiungi il codice di inizializzazione alla tua app:

    1. Apri il progetto nella console Cloud.
    2. Nella pagina provider, fai clic su Dettagli di configurazione dell'applicazione. Viene visualizzato uno snippet di codice che inizializza Identity Platform.
    3. Copia e incolla lo snippet di inizializzazione nella tua pagina web.
  2. Aggiungi il widget di autenticazione all'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 Identity Platform, ricevi un token ID chiamando firebase.auth().currentUser.getToken().

    2. Invia il token ID al server di backend, convalidalo ed emettere 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 (CSRF) tra siti.

      Se il tuo framework non fornisce la protezione CSRF, un modo per prevenire un attacco è ottenere un token ID per l'utente che ha eseguito l'accesso con getToken() e includere il token in ogni richiesta (per impostazione predefinita viene inviato anche il cookie di sessione). Puoi quindi convalidare il token utilizzando SDK Admin, oltre al controllo dei cookie della sessione, completato dal framework di backend. Ciò renderà più difficile l'esito positivo degli attacchi CSRF, poiché il token ID 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. Puoi continuare a emettere token che durano due settimane oppure allungarli o accorciarli in base ai requisiti di sicurezza della tua app. Quando un utente si disconnette, cancella il cookie della sessione.

Passaggio 3: aggiorna gli URL di reindirizzamento IdP

  1. In Cloud Console, apri la sezione Provider.

  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 Identity Platform alla tua app con Firebase

  1. Apri la console Cloud e seleziona il tuo progetto Identity Toolkit.

  2. Nella pagina Provider, fai clic su Dettagli di configurazione dell'applicazione, seleziona la scheda Android, quindi fai clic su Inizia a utilizzare Firebase. Nella finestra di dialogo Aggiungi Firebase, inserisci il nome del pacchetto dell'app e l'impronta per il certificato di firma, quindi fai clic su Aggiungi app. Il file di configurazione google-services.json viene quindi 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 la seguente riga dopo il plug-in Android per Gradle per attivare il plug-in google-services:

    apply plugin: 'com.android.application'
    // Add this line
    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 di 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 Identity Toolkit con quelle a FirebaseUI.

iOS

Passaggio 1: aggiungi Firebase alla tua app

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

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Apri la console Cloud e seleziona il tuo progetto Identity Toolkit.

  3. Nella pagina Provider, fai clic su Dettagli di configurazione dell'applicazione, seleziona la scheda iOS, quindi fai clic su Inizia a utilizzare Firebase. Nella finestra di dialogo Aggiungi Firebase, fornisci il nome del pacchetto dell'app e l'impronta del certificato di firma, quindi fai clic su Aggiungi app. Il file di configurazione google-services.json viene quindi scaricato sul computer. Nella finestra di dialogo Aggiungi Firebase, fornisci l'ID bundle e l'ID App Store della tua app, 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 Identity Toolkit con quelle a FirebaseUI.