Ce tutoriel explique comment récupérer, valider et stocker les identifiants tiers à l'aide d'Identity Platform, de l'environnement standard App Engine et de Datastore.
Ce document décrit une application de prise de notes simple appelée "Firenotes", qui stocke les notes des utilisateurs dans leurs notebooks personnels. Les notebooks sont stockés par utilisateur et identifiés par l'ID Identity Platform unique de chaque utilisateur. L'application est constituée des composants suivants :
Le frontend configure l'interface utilisateur de connexion et récupère l'identifiant Identity Platform. Il gère également les changements d'état d'authentification et permet aux utilisateurs de voir leurs notes.
FirebaseUI est une solution Open Source prête à l'emploi qui simplifie les tâches d'authentification et d'UI. Le SDK gère la connexion des utilisateurs, associe plusieurs fournisseurs à un compte, récupère les mots de passe, et bien plus encore. Il met en œuvre les meilleures pratiques d'authentification pour une expérience de connexion fluide et sécurisée.
Le serveur vérifie l'état d'authentification de l'utilisateur et renvoie les informations du profil utilisateur, ainsi que les notes de l'utilisateur.
L'application stocke les identifiants utilisateur dans Datastore à l'aide de la bibliothèque cliente NDB, mais vous pouvez stocker les identifiants dans la base de données de votre choix.
Firenotes est basé sur le Fiole un framework d'application Web. L'exemple d'application utilise Flask en raison de sa simplicité et de sa facilité d'utilisation, mais les concepts et les technologies explorés sont applicables quel que soit le framework que vous utilisez.
Objectifs
Dans ce tutoriel, vous réaliserez les tâches suivantes :
- Configurer l'interface utilisateur avec FirebaseUI pour Identity Platform.
- Obtenir un jeton d'ID Identity Platform et le vérifier à l'aide de l'authentification côté serveur
- Stocker les identifiants utilisateur et les données associées dans Datastore.
- Interroger une base de données à l'aide de la bibliothèque cliente NDB.
- Déployer une application sur App Engine.
Coûts
Ce tutoriel utilise des composants facturables de Google Cloud, dont :
- Datastore
- Identity Platform
Utilisez le Simulateur de coût pour générer une estimation des coûts en fonction de votre utilisation prévue.
Avant de commencer
- Installez Git, Python 2.7 et virtualenv. Pour en savoir plus sur la configuration de votre environnement de développement Python, par exemple sur l'installation de la dernière version de Python, consultez la page Configurer un environnement de développement Python pour Google Cloud.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Si vous avez déjà installé et initialisé le SDK dans un autre projet, définissez le projet gcloud
sur l'ID de projet App Engine que vous utilisez pour Firenotes. Consultez la page Gérer les configurations du SDK Google Cloud pour voir des commandes spécifiques permettant de mettre à jour un projet avec l'outil gcloud
.
Cloner l'exemple d'application
Pour télécharger l'exemple sur l'ordinateur local :
Clonez le dépôt de l'exemple d'application sur votre ordinateur local :
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Accédez au répertoire qui contient l'exemple de code :
cd python-docs-samples/appengine/standard/firebase/firenotes
Ajouter l'interface utilisateur
Pour configurer FirebaseUI pour Identity Platform et activer les fournisseurs d'identité :
Ajoutez Identity Platform à votre application en procédant comme suit :
- Accédez à Google Cloud Console.
Accéder à la console Google Cloud - Sélectionnez le projet Google Cloud que vous souhaitez utiliser :
- Si vous disposez déjà d'un projet, sélectionnez-le dans la liste déroulante Sélectionner une organisation en haut de la page.
- Si vous ne disposez d'aucun projet Google Cloud, créez-en un dans la console Google Cloud.
- Accédez à Identity Platform Marketplace.
de la console Google Cloud.
Accéder à la page "Identity Platform Marketplace" - Sur la page Identity Platform Marketplace, cliquez sur Enable Customer Identity (Activer l'identité du client).
- Accédez à la section Utilisateurs de l'identité client.
de la console Google Cloud.
Accéder à la page Utilisateurs - En haut à droite, cliquez sur Informations sur la configuration de l'application.
Copiez les informations sur la configuration de l'application dans votre application Web.
- Accédez à Google Cloud Console.
Modifiez le fichier
backend/app.yaml
et saisissez l'ID de votre projet Google Cloud dans les variables d'environnement :Dans le fichier
frontend/main.js
, configurez le widget de connexion FirebaseUI. en sélectionnant les fournisseurs que vous souhaitez proposer à vos utilisateurs.Dans la console Google Cloud, activez les fournisseurs que vous souhaitez conserver :
- Accédez à la page Fournisseurs d'identité client dans la console Google Cloud.
Accéder à la page "Fournisseurs" - Cliquez sur Ajouter un fournisseur.
- Dans la liste déroulante Sélectionner un fournisseur, sélectionnez les fournisseurs que vous souhaitez utiliser.
- À côté d'Activé, cliquez sur le bouton pour activer le fournisseur.
- Pour les fournisseurs d'identité tiers, saisissez l'ID du fournisseur et sa clé secrète à partir de son site pour les développeurs. Les documents Firebase donnent des instructions spécifiques dans la section "Avant de commencer" de la Facebook Twitter et GitHub .
- Pour les intégrations SAML et OIDC, reportez-vous à la configuration effectuée sur le site de votre fournisseur d'identité.
- Accédez à la page Fournisseurs d'identité client dans la console Google Cloud.
Ajoutez votre domaine à la liste des domaines autorisés dans Identity Platform :
- Accédez à la page Paramètres de l'identité client dans la console Google Cloud.
Accéder à la page Paramètres - Dans la section Authorized Domains (Domaines autorisés), cliquez sur Add Domain (Ajouter un domaine).
Saisissez le domaine de votre application en respectant le format suivant :
[PROJECT_ID].appspot.com
N'incluez pas
http://
avant le nom de domaine.
- Accédez à la page Paramètres de l'identité client dans la console Google Cloud.
Installer les dépendances
Accédez au répertoire
backend
et terminez la configuration de l'application comme suit :cd backend/
Installez les dépendances dans un répertoire
lib
de votre projet :pip install -t lib -r requirements.txt
Dans
appengine_config.py
, la méthodevendor.add()
enregistre les bibliothèques dans le répertoirelib
.
Exécuter votre application en local
Pour exécuter l'application en local, utilisez le serveur de développement local App Engine :
Ajoutez l'URL suivante en tant que
backendHostURL
dansmain.js
:http://localhost:8081
Accédez au répertoire racine de l'application. Ensuite, démarrez le serveur de développement :
dev_appserver.py frontend/app.yaml backend/app.yaml
Visitez http://localhost:8080/ dans un navigateur Web.
Authentifier des utilisateurs auprès du serveur
Maintenant que vous avez configuré un projet et initialisé une application pour le développement, vous pouvez parcourir le code pour comprendre comment récupérer et vérifier les jetons d'ID Identity Platform sur le serveur.
Obtenir un jeton d'ID depuis Identity Platform
La première étape de l'authentification côté serveur consiste à récupérer un jeton d'accès à vérifier. Les requêtes d'authentification sont traitées avec l'écouteur onAuthStateChanged()
d'Identity Platform :
Lorsqu'un utilisateur est connecté, la méthode getToken()
d'Identity Platform du rappel renvoie un jeton d'ID Identity Platform sous la forme d'un jeton Web JSON (JWT, JSON Web Token).
Vérifier des jetons sur le serveur
Une fois qu'un utilisateur s'est connecté, le service d'interface récupère toutes les notes existantes dans le notebook de l'utilisateur via une requête AJAX GET
. Cela nécessite une autorisation pour accéder aux données de l'utilisateur. Le jeton JWT est donc envoyé dans l'en-tête Authorization
de la requête avec le schéma Bearer
:
Votre serveur doit vérifier que le jeton est signé par Identity Platform avant que le client ne puisse accéder aux données du serveur. Vous pouvez vérifier ce jeton à l'aide de la bibliothèque d'authentification Google pour Python.
Utilisez la bibliothèque d'authentification
verify_firebase_token
pour vérifier le jeton de support et extraire les revendications:
Chaque fournisseur d'identité envoie un ensemble différent de revendications. Chaque ensemble comporte au moins une revendication sub
avec un ID utilisateur unique et une revendication fournissant certaines informations de profil, telles que name
ou email
, dont vous pouvez vous servir pour personnaliser l'expérience utilisateur sur votre application.
Gérer les données utilisateur dans Datastore
Après avoir authentifié un utilisateur, vous devez stocker ses données pour qu'elles puissent persister une fois la session ouverte terminée. Les sections suivantes expliquent comment stocker une note en tant qu'entité Datastore et séparer les entités par ID utilisateur.
Créer des entités pour stocker des données utilisateur
Vous pouvez créer une entité dans Datastore en déclarant une classe de modèle NDB avec certaines propriétés, telles que des entiers ou des chaînes. Datastore indexe les entités par genre. Dans le cas de l'application Firenotes, le genre de chaque entité est Note
.
À des fins d'interrogation, chaque Note
est stockée avec un nom de clé qui correspond à l'ID utilisateur obtenu à partir de la revendication sub
de la section précédente.
Le code suivant montre comment définir les propriétés d'une entité, lors de la création de l'entité avec la méthode constructeur de la classe de modèle et après sa création via l'affectation de propriétés individuelles :
Pour écrire la nouvelle Note
dans Datastore, appelez la méthode put()
sur l'objet note
.
Récupérer des données utilisateur
Pour récupérer les données utilisateur associées à un ID utilisateur particulier, appelez la méthode query()
de la bibliothèque NDB pour rechercher dans la base de données des notes appartenant au même groupe d'entités.
Les entités du même groupe, ou ayant le même chemin d'ancêtre, partagent un nom de clé commun, qui correspond dans ce cas à l'ID utilisateur.
Vous pouvez ensuite récupérer les données de requête et afficher les notes dans le client :
Déployer l'application
Vous avez intégré Identity Platform à votre application App Engine. Pour voir votre application s'exécuter dans un environnement de production en temps réel, procédez comme suit :
- Remplacez l'URL de l'hôte de backend dans le fichier
main.js
parhttps://backend-dot-[PROJECT_ID].appspot.com
. Remplacez[PROJECT_ID]
par l'ID du projet. Déployez l'application à l'aide de l'interface de ligne de commande du SDK Google Cloud :
gcloud app deploy backend/index.yaml frontend/app.yaml backend/app.yaml
Consultez l'application en ligne à l'adresse
https://[PROJECT_ID].appspot.com
.
Nettoyer
Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud, supprimez votre projet App Engine comme suit :
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Étapes suivantes
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.