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, le funzionalità di Identity Toolkit non verranno più sviluppate. Tutte le nuove funzionalità verranno sviluppate su Identity Platform e Firebase Authentication. Invitiamo gli sviluppatori di Identity Toolkit a passare a queste piattaforme non appena sarà possibile per le loro applicazioni.

Nuove funzionalità

Identity Platform offre già miglioramenti significativi 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. Questa funzionalità può essere utile per eseguire il debug dei flussi di accesso e registrazione. La console ti consente inoltre di configurare i 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 le app e i servizi SaaS. Identity Platform offre inoltre assistenza per provider come GitHub, Microsoft, Yahoo e altri. Puoi utilizzare l'accesso anonimo per creare un ID utente univoco senza richiedere all'utente di eseguire la procedura di accesso o registrazione. In questo modo, 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 è utile per scenari come i carrelli degli acquisti lato server o altre applicazioni in cui vuoi coinvolgere l'utente prima di inviarlo a un flusso di registrazione.

  • Esegui la scalabilità in tutta sicurezza con gli accordi sul livello del servizio e l'assistenza cloud

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

  • Accesso a tutti i prodotti Firebase

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

  • Interfacce utente aggiornate

    Abbiamo ricostruito completamente le procedure dell'interfaccia utente in base alle ultime ricerche sull'esperienza utente di Google. Sono inclusi il recupero della password, il collegamento degli account, i flussi di sambiguazione degli account nuovi/esistenti che spesso richiedono molto tempo per la codifica e il debug. Integra Smart Lock per password su Android, che ha migliorato notevolmente le conversioni di accesso e registrazione per le app partecipanti. Supporta inoltre semplici modifiche del tema per adattarlo alla tua applicazione e, per una massima personalizzazione, le versioni per Android e iOS sono state rese open source.

  • Configurazione semplificata del server

    Con Identity Toolkit, abbiamo notato che molti sviluppatori hanno scelto di non implementare il flusso di recupero email, impedendo così ai propri utenti di recuperare i propri account se avessero dimenticato la password. Identity Platform può inviare all'utente messaggi di verifica email, reimpostazione della password e password modificata e il testo può essere facilmente personalizzato per i tuoi utenti. Inoltre, non è più necessario ospitare i widget dell'interfaccia utente per l'hosting dei reindirizzamenti e per completare le operazioni di modifica della 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 un'interfaccia utente fissa. Se preferisci, puoi creare manualmente l'intera esperienza e il flusso di accesso in base a 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. Identity Platform 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 potranno più generare nuovi token di accesso, disattivando così l'accesso finché l'utente non eseguirà nuovamente l'autenticazione sul dispositivo.

Differenze nelle 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 essere disponibili soluzioni di riserva semplici che ti consentano di procedere con la migrazione.

Differenze lato server

Il servizio Identity Toolkit di base con le relative API REST sottostanti, la logica di convalida dell'account e il database utente principale hanno subito solo aggiornamenti minori. Tuttavia, alcune funzionalità e il modo in cui integri Identity Platform nel tuo servizio sono cambiati.

  • Provider di identità

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

  • Librerie del server

    Attualmente sono disponibili SDK di amministrazione 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 email dello sviluppatore. Attualmente, i modelli email offrono solo una personalizzazione limitata dall'interfaccia utente, ma possono essere ulteriormente personalizzati con gli SDK Admin.

  • Conferma della 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 il flusso di modifica dell'indirizzo email.

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

  • Implementazione dell'IDP

    Identity Toolkit aveva la possibilità di aggiungere gradualmente i provider di identità al sistema di accesso, in modo da poter sperimentare l'impatto sulle richieste di assistenza. Questa funzionalità è stata rimossa da 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 in SDK client disponibili per Android, iOS e JavaScript. Puoi utilizzare l'SDK per accedere e registrare gli utenti, accedere alle informazioni del profilo dell'utente, collegare, aggiornare ed eliminare gli account e reimpostare le password utilizzando l'SDK client anziché comunicare con il servizio di backend tramite chiamate REST.

  • Widget UI

    Tutti i flussi dell'interfaccia utente che gestiscono l'accesso, la registrazione, il recupero della password e il collegamento degli account sono stati ricostruiti utilizzando gli SDK client e pacchettizzati come widget di accesso. Sono disponibili come SDK open source per iOS, Android e web e ti consentono di personalizzare completamente i flussi in modi non possibili con Identity Toolkit.

Altre differenze includono:

  • Sessioni e migrazione

    Poiché le sessioni vengono gestite in modo diverso in Identity Toolkit e Identity Platform, le sessioni esistenti degli utenti verranno chiuse al momento dell'upgrade dell'SDK e gli utenti dovranno eseguire nuovamente l'accesso.

Prima di iniziare

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

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

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

  3. Apri la Account di servizio. Qui puoi vedere l'account di servizio 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 del tuo account di servizio. Ne avrai bisogno per inizializzare l'SDK nel passaggio successivo.

  5. Torna alla console Cloud. Nella sezione Fornitori, all'interno del metodo di accesso "Email/Password", apri la pagina Modelli email. Potrai quindi personalizzare i modelli della tua app.

    In Identity Toolkit, quando gli utenti reimpostavano le password, cambiavano gli indirizzi email o li verificavano, era necessario recuperare un codice OOB dal server di Identity Toolkit e inviarlo agli utenti via email. Identity Platform invia email in base ai modelli che configuri senza richiedere altre 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 i passaggi di migrazione per la piattaforma della tua app: Android, iOS, web.

Server e JavaScript

Modifiche significative

Esistono una serie di differenze aggiuntive nell'implementazione web di Identity Platform rispetto a Identity Toolkit.

  • Gestione delle sessioni web

    In precedenza, quando un utente si autenticava utilizzando il widget Identity Toolkit, viene impostato un cookie per l'utente che veniva utilizzato per inizializzare la sessione. Questo cookie aveva una durata di due settimane ed era utilizzato per consentire all'utente di utilizzare il widget di gestione dell'account per modificare la password e l'indirizzo email. Alcuni siti utilizzavano questo cookie per autenticare tutte le altre richieste di pagina sul sito. Altri siti hanno utilizzato il cookie per creare i propri cookie tramite il sistema di gestione dei cookie del loro framework.

    Gli SDK client di Identity Platform ora gestiscono token ID e collaborano con il backend di Identity Platform per mantenere aggiornata la sessione. Il backend scade le sessioni quando si verificano modifiche importanti all'account (ad esempio modifiche alle password degli utenti). I token ID non vengono impostati automaticamente come cookie sul client web e hanno una durata di un'ora. A meno che non vuoi sessioni di solo un'ora, gli ID token non sono appropriati per essere utilizzati come cookie per convalidare tutte le richieste di pagina. Dovrai invece configurare un ascoltatore per quando l'utente accede, ottenere l'ID token, 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 al momento dell'accesso per scoprire quale identificatore volevano utilizzare. Il flusso dell'interfaccia utente di Identity Platform 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ù obbligatori nell'interfaccia utente. In questo modo sarà più facile supportare gli utenti anonimi, gli utenti di autenticazione personalizzata o gli utenti di fornitori in cui non sono richiesti indirizzi email.

  • Widget di gestione dell'account

    Questo widget fornisce un'interfaccia utente che consente agli utenti di modificare gli indirizzi email, cambiare la password o scollegare i propri account dai provider di identità. Al momento è in fase di sviluppo.

  • Widget/pulsante di accesso

    I widget come il pulsante di accesso e la scheda utente non sono più disponibili. Possono essere creati molto facilmente utilizzando l'API Firebase Authentication.

  • Nessun signOutUrl

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

  • Nessun oobActionUrl

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

  • Personalizzazione CSS

    Il widget dell'interfaccia utente utilizza lo stile Material Design Lite, che aggiunge dinamicamente le animazioni di Material Design.

Passaggio 1: modifica il codice del server

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

    1. Implementa un endpoint per convalidare l'ID token e impostare il cookie di sessione per l'utente. L'app client invia il token ID Firebase a questo endpoint.
    2. Se la richiesta in arrivo 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, devi attendere due settimane affinché tutti i token di Identity Toolkit scadano oppure eseguire anche la convalida del doppio token per la tua applicazione web come descritto di seguito nel passaggio 3.
  2. Poiché i token ID sono diversi dai token Identity Toolkit, devi aggiornare la logica di convalida dei token. Installa l'SDK Admin sul tuo server oppure, se utilizzi un linguaggio non supportato dall'SDK Admin, scarica una libreria di convalida dei token JWT per il tuo ambiente e convalida correttamente il token.

  3. Quando esegui per la prima volta gli aggiornamenti precedenti, potresti avere ancora percorsi di codice che si basano sui token di Identity Toolkit. Se hai applicazioni per iOS o Android, gli utenti dovranno eseguire l'upgrade alla nuova versione dell'app per far funzionare i nuovi percorsi di codice. Se non vuoi forzare gli utenti ad aggiornare la tua app, puoi aggiungere un'ulteriore logica di convalida del server che esamini il token e stabilisca se è necessario utilizzare l'SDK Firebase o l'SDK Identity Toolkit per convalidarlo. Se hai solo un'applicazione web, tutte le nuove richieste di autenticazione verranno spostate su Identity Platform e, pertanto, dovrai utilizzare solo i metodi di verifica dell'ID token.

Consulta il riferimento all'API web.

Passaggio 2: aggiorna il codice HTML

  1. Aggiungi il codice di inizializzazione all'app:

    1. Apri il progetto nella console Cloud.
    2. Nella pagina Fornitori, 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 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 utilizzavi l'token ID di Identity Toolkit per la gestione delle sessioni, devi apportare le seguenti modifiche 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 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. Devi fornire ulteriore protezione contro le attività fraudolente cross-site (CSRF).

      Se il tuo framework non fornisce protezione CSRF, un modo per impedire un attacco è ottenere un token ID per l'utente che ha eseguito l'accesso con getToken() e includerlo in ogni richiesta (per impostazione predefinita verrà inviato anche il cookie di sessione). Dovresti quindi convalidare il token utilizzando l'SDK Admin, oltre al controllo del cookie di sessione, che è stato completato dal tuo framework di backend. In questo modo sarà più difficile per gli attacchi CSRF andare a buon fine, poiché l'ID token viene archiviato 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 che durano due settimane o di renderli più lunghi o più brevi in base ai requisiti di sicurezza della tua app. Quando un utente esce, cancella il cookie della sessione.

Passaggio 3: aggiorna gli URL di reindirizzamento all'IdP

  1. In Cloud Console, apri la sezione Provider.

  2. Per ogni provider di accesso federato supportato, svolgi i seguenti passaggi:

    1. Fai clic sul nome del provider di accesso.
    2. Copia l'URI di reindirizzamento OAuth.
    3. Nella console dello sviluppatore 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 Fornitori, fai clic su Dettagli di configurazione dell'applicazione, seleziona la scheda Android e poi fai clic su Inizia in Firebase. Nella finestra di dialogo Aggiungi Firebase, fornisci il nome del pacchetto e l'impronta del certificato di firma della tua app e fai clic su Aggiungi app. Il file di configurazione google-services.json viene scaricato sul computer.

  3. Copia il file di configurazione nella directory principale del modulo dell'app per Android. Questo file di configurazione contiene le informazioni del progetto e del 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. Anche 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 (<var>my-project</var>/<var>app-module</var>/build.gradle) a livello di app della tua app, aggiungi la riga seguente dopo il plug-in Android 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 la tua applicazione in modo che utilizzi Firebase.

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

    compile 'com.google.firebase:firebase-auth:23.1.0'
    compile 'com.google.android.gms:play-services-auth:21.3.0'
    

Passaggio 2: rimuovi l'SDK Identity Toolkit

  1. Rimuovi la configurazione di Identity Toolkit dal file AndroidManifest.xml. Queste informazioni sono 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 chiamate a FirebaseUI.

iOS

Passaggio 1: aggiungi Firebase alla tua app

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

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

  3. Nella pagina Fornitori, fai clic su Dettagli di configurazione dell'applicazione, seleziona la scheda iOS e poi fai clic su Inizia su Firebase. Nella finestra di dialogo Aggiungi Firebase, fornisci il nome del pacchetto e l'impronta del certificato di firma della tua app e fai clic su Aggiungi app. Il file di configurazione google-services.json viene quindi scaricato sul tuo computer. Nella finestra di dialogo Aggiungi Firebase, fornisci l'ID bundle e l'ID App Store della tua app, quindi fai clic su Aggiungi app. Il file di configurazione GoogleService-Info.plist viene scaricato sul computer. Se nel tuo progetto sono presenti più ID bundle, ogni ID deve essere collegato nella Console Firebase in modo da 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 chiamate a FirebaseUI.