Effectuer une migration de Google Identity Toolkit vers Firebase Authentication

La dernière version de Google Identity Toolkit a été publiée sous le nom Firebase Authentication. À l'avenir, le travail sur les fonctionnalités d'Identity Toolkit sera interrompu et tout développement de nouvelles fonctionnalités se fera sur Firebase Authentication. Nous encourageons les développeurs Identity Toolkit à passer à Firebase Authentication dès que possible pour leurs applications. Toutefois, Identity Toolkit continuera de fonctionner et ne sera pas abandonné sans autre annonce.

Nouvelles fonctionnalités

Firebase Authentication offre déjà d'importantes améliorations de fonctionnalités par rapport à Google Identity Toolkit:

  • Accès à l'ensemble de Firebase

    Firebase est une plate-forme mobile qui vous permet de développer rapidement des applications de haute qualité, d'élargir votre base d'utilisateurs et d'accroître vos revenus. Firebase propose des fonctionnalités complémentaires que vous pouvez combiner selon vos besoins et inclut une infrastructure pour l'analyse pour mobile, la messagerie dans le cloud, la base de données en temps réel, le stockage de fichiers, l'hébergement statique, la configuration à distance, les rapports d'erreur mobiles et Android test.

  • Interfaces utilisateur mises à jour

    Nous avons entièrement repensé les flux de l'interface utilisateur sur la base des dernières recherches sur l'expérience utilisateur de Google. Cela inclut la récupération du mot de passe, l'association de comptes, et les procédures de sélection des comptes nouveaux/existants, qui prennent souvent beaucoup de temps pour coder et déboguer. Elle intègre Smart Lock pour les mots de passe sur Android, ce qui a considérablement amélioré la conversion de connexion et d'inscription pour les applications participantes. Il permet également de modifier facilement le thème afin qu'il corresponde à votre application. De plus, pour une personnalisation maximale, les versions Android et iOS ont été mises à disposition en Open Source.

  • Configuration de serveur simplifiée

    Nous avons simplifié l'utilisation de Firebase Authentication pour les développeurs. Avec Identity Toolkit, nous avons constaté que de nombreux développeurs avaient choisi de ne pas implémenter le processus de récupération des e-mails, ce qui empêchait les utilisateurs de récupérer leurs comptes en cas d'oubli du mot de passe. Firebase Authentication peut envoyer à l'utilisateur des messages de validation des e-mails, de réinitialisation de mot de passe et de modification de mot de passe. Ce texte peut être facilement personnalisé pour vos utilisateurs. De plus, vous n'avez plus besoin d'héberger les widgets d'interface utilisateur pour héberger les redirections et effectuer les opérations de modification de mot de passe.

  • Nouvelle console d'administration

    Firebase dispose d'une nouvelle console pour les développeurs et la section "Authentification" vous permet d'afficher, de modifier et de supprimer vos utilisateurs. Cela peut être d'une aide précieuse pour déboguer vos processus de connexion et d'inscription. La console vous permet également de configurer des méthodes d'authentification et de personnaliser les modèles d'e-mail.

  • Nouveaux SDK

    Toutes les API serveur de Identity Toolkit sont désormais disponibles en mode natif avec chacune de nos bibliothèques clientes (Android, iOS, Web). Les développeurs pourront se connecter et inscrire des utilisateurs, anciens et nouveaux, accéder aux propriétés utilisateur, associer, mettre à jour et supprimer des comptes, réinitialiser les mots de passe et plus encore, sans être liés à une interface utilisateur fixe. Si vous préférez, vous pouvez créer manuellement votre propre processus de connexion et votre expérience en plus de cette API.

  • Gestion des sessions pour les applications mobiles

    Avec Identity Toolkit, les applications ont créé leur propre état de session en fonction de l'événement d'authentification initial d'Identity Toolkit. Firebase Auth utilise un service de backend qui récupère un jeton d'actualisation, généré à partir de l'événement d'authentification, et l'échange contre des jetons d'accès d'une heure pour Android, iOS et JavaScript. Lorsqu'un utilisateur modifie son mot de passe, les jetons d'actualisation ne peuvent plus générer de nouveaux jetons d'accès. Ils désactivent ainsi l'accès jusqu'à ce que l'utilisateur s'authentifie à nouveau sur cet appareil.

  • Authentification anonyme et GitHub

    Firebase Authentication accepte deux nouveaux types d'authentification: GitHub et anonyme. La connexion anonyme peut être utilisée pour créer un ID utilisateur unique sans que l'utilisateur ait à passer par un processus de connexion ou d'inscription. Avec un utilisateur anonyme, vous pouvez désormais effectuer des appels d'API authentifiés, comme vous le feriez avec un utilisateur standard. Lorsque l'utilisateur décide de créer un compte, toute l'activité est conservée avec le même ID utilisateur. C'est la solution idéale dans des situations telles qu'un panier d'achat côté serveur ou toute application dans laquelle vous souhaitez susciter l'intérêt de l'utilisateur avant de l'envoyer via un processus d'inscription.

Différences de fonctionnalités

Certaines fonctionnalités Identity Toolkit ne sont actuellement pas disponibles dans Firebase Authentication, tandis que d'autres ont été repensées et fonctionnent différemment. Vous pouvez choisir de ne pas migrer immédiatement si ces fonctionnalités sont importantes pour votre application. Dans de nombreux cas, elles ne sont peut-être pas importantes pour votre application, ou des solutions de secours peuvent vous permettre de procéder à la migration.

Différences côté serveur

Le service Identity Toolkit principal avec ses API REST sous-jacentes, sa logique de validation de compte et sa base de données principale d'utilisateurs n'ont fait l'objet que de mises à jour mineures. Cependant, certaines fonctionnalités et la manière dont vous intégrez Firebase Authentication à votre service ont changé.

  • Fournisseurs d'identité

    PayPal et AOL ne sont pas acceptés. Les utilisateurs disposant de comptes provenant de ces IdP peuvent toujours se connecter à votre application via le flux de récupération de mot de passe et définir un mot de passe pour leur compte.

  • Bibliothèques serveur

    Actuellement, des SDK administrateur Firebase sont disponibles pour Java, Node.js, Python, Go et C#.

  • E-mails de gestion du compte

    La réinitialisation du mot de passe, la validation de l'adresse e-mail et les messages de modification de l'adresse e-mail peuvent être effectués par Firebase ou depuis le serveur de messagerie du développeur. Actuellement, les modèles d'e-mail Firebase n'offrent qu'une personnalisation limitée.

  • Confirmation du changement d'adresse e-mail

    Dans Identity Toolkit, lorsqu'un utilisateur décide de modifier son adresse e-mail, il envoie à la nouvelle adresse un e-mail contenant un lien pour poursuivre le processus de modification d'adresse e-mail.

    Firebase confirme le changement d'adresse e-mail en envoyant un e-mail de révocation à l'ancienne adresse e-mail avec un lien permettant d'annuler la modification.

  • Déploiement du fournisseur d'identité

    Identity Toolkit permettait d'ajouter progressivement des fournisseurs d'identité à votre système de connexion, afin que vous puissiez tester l'impact sur vos demandes d'assistance. Cette fonctionnalité a été supprimée de Firebase Authentication.

Différences côté client

Dans Firebase, les fonctionnalités fournies par Google Identity Toolkit sont divisées en deux composants:

  • SDK Firebase Authentication

    Dans Firebase Authentication, les fonctionnalités fournies par l'API REST de Identity Toolkit ont été empaquetées dans les SDK clients disponibles pour Android, iOS et JavaScript. Vous pouvez l'utiliser pour connecter et inscrire des utilisateurs, accéder aux informations de profil utilisateur, associer, mettre à jour et supprimer des comptes, et réinitialiser les mots de passe à l'aide du SDK client au lieu de communiquer avec le service de backend via des appels REST.

  • Authentification FirebaseUI

    Tous les flux d'interface utilisateur qui gèrent la connexion, l'inscription, la récupération du mot de passe et l'association de compte ont été recréés à l'aide des SDK Frebase Authentication. Ils sont disponibles sous forme de SDK Open Source pour iOS et Android afin de vous permettre de personnaliser complètement les flux, ce qui n'est pas possible avec Identity Toolkit.

Autres différences:

  • Sessions et migration

    Les sessions étant gérées différemment dans Identity Toolkit et Firebase Authentication, les sessions existantes de vos utilisateurs seront interrompues lors de la mise à niveau du SDK, et ils devront se reconnecter.

Avant de commencer

Avant de pouvoir migrer d'Identity Toolkit vers Firebase Authentication, vous devez

  1. Ouvrez la console Firebase, cliquez sur Importer un projet Google, puis sélectionnez votre projet Identity Toolkit.

  2. Cliquez sur > Autorisations pour ouvrir la page "IAM et administration".

  3. Ouvrez la Comptes de service. Le compte de service que vous avez précédemment configuré pour Identity Toolkit s'affiche ici.

  4. À côté du compte de service, cliquez sur > Créer une clé. Ensuite, dans la boîte de dialogue Créer une clé privée, définissez le type de clé sur JSON, puis cliquez sur Créer. Un fichier JSON contenant les identifiants de votre compte de service est téléchargé pour vous. Vous en aurez besoin pour initialiser le SDK à l'étape suivante.

  5. Revenez à la console Firebase. Dans la section "Authentification", ouvrez la page Modèles d'e-mail. Sur cette page, personnalisez les modèles d'e-mail de votre application.

    Dans Identity Toolkit, lorsque les utilisateurs réinitialisaient les mots de passe, modifiaient les adresses e-mail et validaient leurs adresses e-mail, vous deviez obtenir un code OOB sur le serveur Identity Toolkit, puis l'envoyer aux utilisateurs par e-mail. Firebase envoie des e-mails basés sur les modèles que vous configurez, sans aucune autre action requise.

  6. Facultatif: Si vous devez accéder aux services Firebase sur votre serveur, installez le SDK Firebase.

    1. Vous pouvez installer le module Firebase Node.js avec npm:

      $ npm init
      $ npm install --save firebase-admin
      
    2. Dans votre code, vous pouvez accéder à Firebase en utilisant:

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

Ensuite, suivez la procédure de migration pour la plate-forme de votre application: Android, iOS ou Web.

Serveurs et JavaScript

Changements notables

Il existe un certain nombre de différences supplémentaires dans l'implémentation Web de Firebase à partir d'Identity Toolkit.

  • Gestion des sessions Web

    Auparavant, lorsqu'un utilisateur s'authentifiait à l'aide du widget Identity Toolkit, un cookie était défini pour l'utilisateur afin d'amorcer la session. Ce cookie avait une durée de vie de deux semaines et permettait à l'utilisateur de modifier le mot de passe et l'adresse e-mail à l'aide du widget de gestion de compte. Certains sites ont utilisé ce cookie pour authentifier toutes les autres demandes de page sur le site. D'autres sites ont utilisé les cookies pour créer leurs propres cookies via le système de gestion des cookies de leur framework.

    Les SDK clients Firebase gèrent désormais les jetons d'ID Firebase et fonctionnent avec le backend de Firebase Authentication pour maintenir la session à jour. Le backend fait expirer les sessions lorsque des modifications importantes du compte (telles que des modifications du mot de passe utilisateur) sont apportées. Les jetons d'identification Firebase ne sont pas automatiquement définis en tant que cookies sur le client Web et n'ont qu'une durée de vie d'une heure. À moins que vous ne souhaitiez que des sessions d'une heure seulement, les jetons d'ID Firebase ne peuvent pas être utilisés comme cookie pour valider toutes vos requêtes de page. À la place, vous devez configurer un écouteur pour que l'utilisateur se connecte, obtenir le jeton d'ID Firebase, valider le jeton et créer votre propre cookie via le système de gestion des cookies de votre framework.

    Vous devez définir la durée de vie de votre cookie en fonction des besoins de sécurité de votre application.

  • Procédure de connexion Web

    Auparavant, les utilisateurs étaient redirigés vers accountchooser.com lorsque la connexion était lancée, afin de connaître l'identifiant qu'ils souhaitaient utiliser. Le flux de l'interface utilisateur Firebase Auth commence désormais par une liste de méthodes de connexion, y compris une option de messagerie qui redirige vers accountchooser.com pour le Web et utilise l'API HintRequest sur Android. De plus, les adresses e-mail ne sont plus nécessaires dans l'interface utilisateur de Firebase. Il sera ainsi plus facile de prendre en charge les utilisateurs anonymes, les utilisateurs d'authentification personnalisée ou les utilisateurs de fournisseurs pour lesquels les adresses e-mail ne sont pas requises.

  • Widget de gestion des comptes

    Ce widget fournit une interface utilisateur permettant aux utilisateurs de changer d'adresse e-mail ou de mot de passe, ou de dissocier leurs comptes des fournisseurs d'identité. Elle est en cours de développement.

  • Bouton/Widget de connexion

    Les widgets tels que le bouton de connexion et la fiche utilisateur ne sont plus fournis. Vous pouvez les créer très facilement à l'aide de l'API Firebase Authentication.

  • Aucune URL signOutUrl

    Vous devez appeler firebase.auth.signOut() et gérer le rappel.

  • Aucune oobActionUrl

    L'envoi d'e-mails est désormais géré par Firebase et configuré dans la console Firebase.

  • Personnalisation CSS

    FirebaseUI utilise le style Material Design Lite, qui ajoute de manière dynamique des animations Material Design.

Étape 1: Modifiez le code du serveur

  1. Si votre serveur s'appuie sur le jeton Identity Toolkit (valide pendant deux semaines) pour gérer les sessions utilisateur Web, vous devez convertir le serveur pour qu'il utilise son propre cookie de session.

    1. Implémentez un point de terminaison pour valider le jeton d'ID Firebase et définir le cookie de session pour l'utilisateur. L'application cliente envoie le jeton d'ID Firebase à ce point de terminaison.
    2. Si la requête entrante contient votre propre cookie de session, vous pouvez considérer que l'utilisateur est authentifié. Sinon, traitez la requête comme non authentifiée.
    3. Si vous ne souhaitez pas que vos utilisateurs perdent leurs sessions connectées, vous devez attendre deux semaines que tous les jetons Identity Toolkit atteignent l'expiration ou procéder à la validation en double des jetons pour votre application Web, comme décrit ci-dessous à l'étape 3.
  2. Étant donné que les jetons Firebase sont différents des jetons Identity Toolkit, vous devez mettre à jour votre logique de validation des jetons. Installez le SDK Firebase Server sur votre serveur ou, si vous utilisez un langage non compatible avec ce SDK, téléchargez une bibliothèque de validation de jetons JWT pour votre environnement et validez correctement le jeton.

  3. Lorsque vous effectuez les mises à jour ci-dessus pour la première fois, il est possible que vous ayez encore des chemins de code qui reposent sur des jetons Identity Toolkit. Si vous disposez d'applications iOS ou Android, les utilisateurs devront passer à la nouvelle version de l'application pour que les nouveaux chemins de code fonctionnent. Si vous ne souhaitez pas forcer vos utilisateurs à mettre à jour votre application, vous pouvez ajouter une logique de validation de serveur supplémentaire qui examine le jeton et détermine s'il doit utiliser le SDK Firebase ou le SDK Identity Toolkit pour valider le jeton. Si vous ne disposez que d'une application Web, toutes les nouvelles requêtes d'authentification seront transférées vers Firebase. Par conséquent, vous n'aurez besoin d'utiliser que les méthodes de validation des jetons Firebase.

Consultez la documentation de référence de l'API Web Firebase.

Étape 2: Mettez à jour votre code HTML

  1. Ajoutez le code d'initialisation de Firebase à votre application:

    1. Ouvrez votre projet dans la console Firebase.
    2. Sur la page "Présentation", cliquez sur Ajouter une application, puis sur Ajouter Firebase à votre application Web. Un extrait de code qui initialise Firebase s'affiche.
    3. Copiez et collez l'extrait d'initialisation sur votre page Web.
  2. Ajoutez FirebaseUI Auth à votre application:

    <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. Supprimez le SDK Identity Toolkit de votre application.

  4. Si vous avez utilisé le jeton d'ID Identity Toolkit pour gérer les sessions, vous devez apporter les modifications suivantes côté client:

    1. Une fois connecté à Firebase, obtenez un jeton d'ID Firebase en appelant firebase.auth().currentUser.getToken().

    2. Envoyez le jeton d'ID Firebase au serveur backend, validez-le et émettez votre propre cookie de session.

      Ne vous fiez pas uniquement au cookie de session lorsque vous effectuez des opérations sensibles ou envoyez des requêtes de modification authentifiées à votre serveur. Vous devez fournir une protection supplémentaire contre la falsification de requête intersites (CSRF).

      Si votre framework ne fournit pas de protection CSRF, une façon d'empêcher une attaque consiste à obtenir un jeton d'ID Firebase pour l'utilisateur connecté avec getToken() et à l'inclure dans chaque requête (le cookie de session sera également envoyé par défaut). Vous devez ensuite valider ce jeton à l'aide du SDK du serveur Firebase, en plus de la vérification des cookies de session effectuée par votre framework de backend. Il sera alors plus difficile pour les attaques CSRF de réussir, car le jeton d'ID Firebase n'est stocké qu'à l'aide du stockage Web et ne se trouve jamais dans un cookie.

    3. Les jetons Identity Toolkit sont valides pendant deux semaines. Vous pouvez continuer à émettre des jetons qui durent deux semaines, ou vous pouvez l'allonger ou la raccourcir en fonction des exigences de sécurité de votre application. Lorsqu'un utilisateur se déconnecte, effacez le cookie de la session.

Étape 3: Mettez à jour les URL de redirection IdP

  1. Dans la console Firebase, ouvrez la section "Authentification" et cliquez sur l'onglet Méthode de connexion.

  2. Pour chaque fournisseur de connexion fédérée que vous prenez en charge, procédez comme suit:

    1. Cliquez sur le nom du fournisseur de connexion.
    2. Copiez l'URI de redirection OAuth.
    3. Dans la console pour les développeurs du fournisseur de connexion, mettez à jour l'URI de redirection OAuth.

Android

Étape 1: Ajoutez Firebase à votre application

  1. Ouvrez la console Firebase et sélectionnez le projet Identity Toolkit, que vous avez déjà importé.

  2. Sur la page "Présentation", cliquez sur Ajouter une application, puis sur Ajouter Firebase à votre application Android. Dans la boîte de dialogue "Ajouter Firebase", indiquez le nom du package et l'empreinte du certificat de signature de votre application, puis cliquez sur Ajouter une application. Le fichier de configuration google-services.json est ensuite téléchargé sur votre ordinateur.

  3. Copiez le fichier de configuration dans le répertoire racine du module de votre application Android. Ce fichier de configuration contient des informations sur le projet et le client OAuth Google.

  4. Dans le fichier build.gradle au niveau du projet (<var>your-project</var>/build.gradle), spécifiez le nom du package de votre application dans la section defaultConfig:

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. Toujours dans le fichier build.gradle au niveau du projet, ajoutez une dépendance pour inclure le plug-in google-services:

    buildscript {
     dependencies {
       // Add this line
       classpath 'com.google.gms:google-services:3.0.0'
     }
    }
    
  6. Dans le fichier build.gradle au niveau de l'application (<var>my-project</var>/<var>app-module</var>/build.gradle) de votre application, ajoutez la ligne suivante en bas pour activer le plug-in google-services:

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

    Le plug-in google-services utilise le fichier google-services.json pour configurer votre application afin qu'elle utilise Firebase.

  7. Toujours dans le fichier build.gradle au niveau de l'application, ajoutez la dépendance Firebase Authentication:

    compile 'com.google.firebase:firebase-auth:23.0.0'
    compile 'com.google.android.gms:play-services-auth:21.2.0'
    

Étape 2: Supprimez le SDK Identity Toolkit

  1. Supprimez la configuration Identity Toolkit du fichier AndroidManifest.xml. Ces informations sont incluses dans le fichier google-service.json et chargées par le plug-in google-services.
  2. Supprimez le SDK Identity Toolkit de votre application.

Étape 3: Ajoutez FirebaseUI à votre application

  1. Ajoutez FirebaseUI Auth à votre application.

  2. Dans votre application, remplacez les appels au SDK Identity Toolkit par des appels à FirebaseUI.

iOS

Étape 1: Ajoutez Firebase à votre application

  1. Ajoutez le SDK Firebase à votre application en exécutant les commandes suivantes:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Ouvrez la console Firebase et sélectionnez le projet Identity Toolkit, que vous avez déjà importé.

  3. Sur la page "Présentation", cliquez sur Ajouter une application, puis sur Ajouter Firebase à votre application iOS. Dans la boîte de dialogue "Ajouter Firebase", indiquez l'ID du bundle et l'ID App Store de votre application, puis cliquez sur Ajouter une application. Le fichier de configuration GoogleService-Info.plist est ensuite téléchargé sur votre ordinateur. Si votre projet comporte plusieurs ID de bundle, chacun d'eux doit être connecté dans la console Firebase pour qu'il puisse avoir son propre fichier GoogleService-Info.plist.

  4. Copiez le fichier de configuration à la racine de votre projet Xcode et ajoutez-le à toutes les cibles.

Étape 2: Supprimez le SDK Identity Toolkit

  1. Supprimez GoogleIdentityToolkit du Podfile de votre application.
  2. Exécutez la commande pod install.

Étape 3: Ajoutez FirebaseUI à votre application

  1. Ajoutez FirebaseUI Auth à votre application.

  2. Dans votre application, remplacez les appels au SDK Identity Toolkit par des appels à FirebaseUI.