Migrer de Google Identity Toolkit vers Identity Platform de Google Cloud

La dernière version de Google Identity Toolkit a été publiée sous les noms Identity Platform et Firebase Authentication. À l'avenir, le travail sur les fonctionnalités d'Identity Toolkit sera bloqué. Tout le développement des nouvelles fonctionnalités sera effectué sur Identity Platform et Firebase Authentication. Nous encourageons les développeurs Identity Toolkit à adopter ces plates-formes dès que cela s'avère réalisable pour leurs applications.

Nouvelles fonctionnalités

Identity Platform propose déjà des fonctionnalités importantes par rapport à Google Identity Toolkit:

  • Nouvelle console d'administration

    Identity Platform dispose d'une nouvelle console pour les développeurs qui vous permet d'afficher, de modifier et de supprimer vos utilisateurs. Cela peut être utile pour déboguer vos flux de connexion et d'inscription. La console vous permet également de configurer les méthodes d'authentification et de personnaliser les modèles d'e-mail.

  • Nouvelles méthodes d'authentification

    Identity Platform est compatible avec les normes de fédération d'entreprise, telles que SAML et OIDC, ce qui vous permet de faire évoluer vos applications et services SaaS. Identity Platform est également compatible avec des fournisseurs tels que GitHub, Microsoft, Yahoo et bien d'autres. Vous pouvez utiliser la connexion anonyme pour créer un ID utilisateur unique sans que l'utilisateur n'ait à suivre de processus de connexion ou d'inscription. Vous pouvez ainsi 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. Cette approche est utile pour des scénarios tels que les paniers d'achat côté serveur ou d'autres applications dans lesquelles vous souhaitez susciter l'intérêt de l'utilisateur avant de l'envoyer via un processus d'inscription.

  • Évoluez en toute confiance grâce aux contrats de niveau de service et à l'assistance Cloud

    Identity Platform repose sur l'infrastructure de confiance de Google et fournit des contrats de niveau de service ainsi qu'une assistance Google Cloud. Cela signifie que vous pouvez faire évoluer votre service en toute confiance, et que vous pouvez compter sur Google pour vous offrir la résilience, la disponibilité et l'évolutivité dont vous avez besoin.

  • 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 à votre guise en fonction de vos besoins et qui inclut une infrastructure pour l'analyse mobile, la messagerie 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 les tests Android.

  • Interfaces utilisateur mises à jour

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

  • Une configuration de serveur simplifiée

    Avec Identity Toolkit, nous avons constaté que de nombreux développeurs avaient choisi de ne pas mettre en œuvre le flux de récupération des adresses e-mail, ce qui empêchait les utilisateurs de récupérer leur compte en cas d'oubli du mot de passe. Identity Platform peut envoyer à l'utilisateur des messages de validation de l'adresse e-mail, de réinitialisation du mot de passe et de modification du mot de passe. Ces messages peuvent être facilement personnalisés pour vos utilisateurs. De plus, vous n'avez plus besoin d'héberger les widgets UI pour héberger les redirections et effectuer les opérations de modification du mot de passe.

  • Nouveaux SDK

    Toutes les API serveur d'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, etc., sans être liés à une UI fixe. Si vous préférez, vous pouvez créer manuellement l'intégralité de votre flux de connexion et de votre expérience en plus de cette API.

  • Gestion de sessions pour les applications mobiles

    Avec Identity Toolkit, les applications créent leur propre état de session en fonction de l'événement d'authentification initial à partir d'Identity Toolkit. Identity Platform utilise un service de backend qui reçoit un jeton d'actualisation extrait 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, ce qui désactive l'accès jusqu'à ce que l'utilisateur se réauthentifie sur cet appareil.

Différences entre les fonctionnalités

Certaines fonctionnalités d'Identity Toolkit ne sont actuellement pas disponibles dans Identity Platform, 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 peuvent ne pas être importantes pour votre application ou il peut exister des solutions de secours faciles qui vous permettront de procéder à la migration.

Différences côté serveur

Le service Identity Toolkit principal, ainsi que ses API REST sous-jacentes, sa logique de validation de compte et sa base de données utilisateur principale, n'ont fait l'objet que de mises à jour mineures. Cependant, certaines fonctionnalités et la manière dont vous intégrez Identity Platform à 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 à l'aide du 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 Admin sont disponibles pour Java, Node.js, Python, Go et C#.

  • E-mails de gestion du compte

    Les messages de réinitialisation du mot de passe, de validation de l'adresse e-mail et de modification de l'adresse e-mail peuvent être effectués par Firebase ou depuis le propre serveur de messagerie du développeur. Actuellement, les modèles d'e-mail n'offrent qu'une personnalisation limitée à partir de l'interface utilisateur, mais vous pouvez les personnaliser à l'aide des SDK Admin.

  • Confirmation du changement d'adresse e-mail

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

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

  • Déploiement du IdP

    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 Identity Platform, les fonctionnalités fournies par Google Identity Toolkit sont divisées en deux composants:

  • SDK client et serveur

    Dans Identity Platform, les fonctionnalités fournies par l'API REST d'Identity Toolkit ont été empaquetées dans des SDK clients disponibles pour Android, iOS et JavaScript. Vous pouvez utiliser le SDK pour vous 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 backend via des appels REST.

  • Widget de l'UI

    Tous les flux d'interface utilisateur qui gèrent la connexion, l'inscription, la récupération de mot de passe et l'association de comptes ont été recompilés à l'aide des SDK clients et présentés sous forme de widget de connexion. Ils sont disponibles en tant que SDK Open Source pour iOS, Android et Web, et vous permettent de personnaliser complètement les flux, ce qui est impossible avec Identity Toolkit.

Autres différences:

  • Sessions et migration

    Étant donné que les sessions sont gérées différemment dans Identity Toolkit et dans Identity Platform, les sessions existantes de vos utilisateurs seront arrêtées lors de la mise à niveau du SDK et ils devront se reconnecter.

Avant de commencer

Avant de pouvoir migrer d'Identity Toolkit vers Identity Platform, vous devez:

  1. Ouvrez la console Cloud, puis sélectionnez votre projet Identity Toolkit.

  2. Sur Marketplace, accédez à Identity Platform, puis sélectionnez "Activer Identity Platform".

  3. Ouvrez la Comptes de service. Vous pouvez voir ici le compte de service que vous avez précédemment configuré pour Identity Toolkit.

  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 Cloud. Dans la section "Fournisseurs", dans la méthode de connexion "Adresse e-mail/Mot de passe", ouvrez la page Modèles d'e-mail. Vous pouvez ensuite personnaliser les modèles de votre application.

    Dans Identity Toolkit, lorsque les utilisateurs réinitialisent des mots de passe, modifient des adresses e-mail ou valident leur adresse e-mail, vous deviez obtenir un code OOB auprès du serveur Identity Toolkit, puis l'envoyer par e-mail. Identity Platform envoie des e-mails en fonction des modèles que vous configurez, sans aucune action supplémentaire requise.

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

    1. Vous pouvez installer le SDK Admin pour Node.js avec npm:

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

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

Suivez ensuite la procédure de migration pour la plate-forme de votre application: Android, iOS, Web.

Serveurs et JavaScript

Changements notables

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

  • Gestion des sessions Web

    Auparavant, lorsqu'un utilisateur s'authentifiait à l'aide du widget Identity Toolkit, un cookie était défini pour cet utilisateur afin d'amorcer la session. Ce cookie avait une durée de vie de deux semaines et a été utilisé pour permettre à 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 requêtes de page du site. D'autres sites ont utilisé ce cookie pour créer leurs propres cookies via le système de gestion des cookies de leur framework.

    Les SDK clients Identity Platform gèrent désormais les jetons d'ID et fonctionnent avec le backend d'Identity Platform pour maintenir la session à jour. Le backend fait expirer les sessions en cas de modifications importantes apportées au compte (changement du mot de passe utilisateur, par exemple). Les jetons d'identification 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 vouliez des sessions d'une heure seulement, les jetons d'identification ne sont pas appropriés pour être utilisés comme cookie pour valider toutes vos requêtes de page. À la place, vous devez configurer un écouteur lorsque l'utilisateur se connecte, obtenir le jeton d'ID, 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 la session de votre cookie en fonction des besoins de sécurité de votre application.

  • Flux de connexion Web

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

  • Widget de gestion du compte

    Ce widget fournit aux utilisateurs une UI permettant aux utilisateurs de modifier des adresses e-mail et des mots de passe, ou de dissocier leurs comptes de fournisseurs d'identité. Il est actuellement 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. Elles peuvent être créées très facilement à l'aide de l'API Firebase Authentication.

  • No signOutUrl

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

  • Aucune oobActionUrl

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

  • Personnalisation CSS

    Le widget d'UI utilise le style Material Design Lite, qui ajoute de manière dynamique des animations Material Design.

Étape 1: Modifier le code du serveur

  1. Si votre serveur repose sur le jeton Identity Toolkit (valable deux semaines) pour gérer les sessions des utilisateurs Web, vous devez convertir le serveur pour qu'il utilise son propre cookie de session.

    1. Mettez en œuvre un point de terminaison pour valider le jeton d'ID 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 existantes, vous devez attendre deux semaines pour que tous les jetons Identity Toolkit expirent. Vous pouvez également effectuer la validation à deux jetons pour votre application Web, comme décrit ci-dessous à l'étape 3.
  2. Ensuite, comme les jetons d'ID sont différents des jetons Identity Toolkit, vous devez mettre à jour la logique de validation des jetons. Installez le SDK Admin 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 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 Identity Platform. Vous ne devrez donc utiliser que les méthodes de validation par jeton d'ID.

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

Étape 2: Mettez à jour votre code HTML

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

    1. Ouvrez votre projet dans la console Cloud.
    2. Sur la page Fournisseurs, cliquez sur Informations sur la configuration de l'application. Un extrait de code qui initialise Identity Platform s'affiche.
    3. Copiez et collez l'extrait d'initialisation sur votre page Web.
  2. Ajoutez le widget d'authentification à 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. Après vous être connecté avec Identity Platform, obtenez un jeton d'ID en appelant firebase.auth().currentUser.getToken().

    2. Envoyez le jeton d'ID 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 des requêtes intersites (CSRF).

      Si votre framework ne fournit pas de protection CSRF, un moyen d'empêcher une attaque consiste à obtenir un jeton d'ID 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 Admin en plus de la vérification des cookies de la session, effectuée par votre framework backend. Cela complique la réussite des attaques CSRF, car le jeton d'ID n'est stocké qu'à l'aide d'un stockage Web et 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 les rallonger ou les raccourcir en fonction des exigences de sécurité de votre application. Lorsqu'un utilisateur se déconnecte, effacez le cookie de session.

Étape 3: Mettez à jour les URL de redirection du fournisseur d'identité

  1. Dans Cloud Console, ouvrez la section Fournisseurs.

  2. Pour chaque fournisseur de connexion fédérée que vous acceptez, 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 Identity Platform à votre application avec Firebase

  1. Ouvrez la console Cloud, puis sélectionnez votre projet Identity Toolkit.

  2. Sur la page "Fournisseurs", cliquez sur Informations sur la configuration de l'application, sélectionnez l'onglet Android, puis cliquez sur Premiers pas dans Firebase. Dans la boîte de dialogue "Add Firebase" (Ajouter Firebase), indiquez le nom du package et l'empreinte du certificat de signature de votre application, puis cliquez sur Add App (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 Google OAuth.

  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 de votre application (<var>my-project</var>/<var>app-module</var>/build.gradle), ajoutez la ligne suivante après le plug-in Android Gradle pour activer le plug-in google-services:

    apply plugin: 'com.android.application'
    // Add this line
    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:22.3.1'
    compile 'com.google.android.gms:play-services-auth:21.0.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 l'authentification FirebaseUI à 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 client à votre application en exécutant les commandes suivantes:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Ouvrez la console Cloud, puis sélectionnez votre projet Identity Toolkit.

  3. Sur la page "Fournisseurs", cliquez sur Informations sur la configuration de l'application, sélectionnez l'onglet iOS, puis cliquez sur Premiers pas dans Firebase. Dans la boîte de dialogue "Add Firebase" (Ajouter Firebase), indiquez le nom du package et l'empreinte du certificat de signature de votre application, puis cliquez sur Add App (Ajouter une application). Le fichier de configuration google-services.json est ensuite téléchargé sur votre ordinateur. Dans la boîte de dialogue "Add Firebase" (Ajouter une application), indiquez l'ID du bundle de votre application et l'ID App Store, 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 groupe, chacun d'entre eux doit être connecté dans la console Firebase pour qu'elle 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 l'authentification FirebaseUI à votre application.

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