Questo tutorial mostra come recuperare, verificare e archiviare le credenziali di terze parti utilizzando Identity Platform, l'ambiente standard di App Engine e Datastore.
Questo documento ti guida attraverso una semplice applicazione per prendere appunti chiamata Firenotes, che memorizza le note degli utenti nei loro quaderni personali. Notebooks vengono memorizzati per utente e identificati dall'ID Identity Platform univoco di ciascun utente. L'applicazione è costituita dai seguenti componenti:
Il frontend configura l'interfaccia utente di accesso e recupera l'ID Identity Platform. Gestisce anche le modifiche dello stato di autenticazione e consente agli utenti di visualizzare le proprie note.
FirebaseUI è una soluzione open source integrata che semplifica l'autenticazione e le attività dell'interfaccia utente. L'SDK gestisce l'accesso degli utenti, il collegamento di più provider a un account, il recupero delle password e altro ancora. Implementa le best practice di autenticazione per un'esperienza di accesso fluida e sicura.
Il backend verifica lo stato di autenticazione dell'utente e restituisce le informazioni del profilo utente, nonché le note dell'utente.
L'applicazione archivia le credenziali utente in Datastore utilizzando la libreria client NDB, ma puoi archiviarle in un database a tua scelta.
Firenotes si basa sul framework per applicazioni web Flask. L'app di esempio utilizza Flask per la sua semplicità e facilità d'uso, ma i concetti e le tecnologie esplorati sono applicabili indipendentemente dal framework utilizzato.
Obiettivi
Completando questo tutorial, imparerai a:
- Configura l'interfaccia utente con FirebaseUI per Identity Platform.
- Ottieni un token ID Identity Platform e verificalo utilizzando l'autenticazione lato server.
- Archivia le credenziali utente e i dati associati in Datastore.
- Esegui una query su un database utilizzando la libreria client NDB.
- Esegui il deployment di un'app in App Engine.
Costi
Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:
- Datastore
- Identity Platform
Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.
Prima di iniziare
- Installa Git, Python 2.7 e virtualenv. Per ulteriori informazioni sulla configurazione dell'ambiente di sviluppo Python, ad esempio l'installazione dell'ultima versione di Python, consulta Configurazione di un ambiente di sviluppo Python per 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.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Install the Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
Clona il repository dell'applicazione di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.
Vai alla directory che contiene il codice campione:
cd python-docs-samples/appengine/standard/firebase/firenotes
Aggiungi Identity Platform alla tua app seguendo questi passaggi:
- Vai alla consoleGoogle Cloud .
Vai alla console Google Cloud - Seleziona il progetto Google Cloud che vuoi utilizzare:
- Se hai un progetto esistente, selezionalo nell'elenco a discesa Seleziona organizzazione nella parte superiore della pagina.
- Se non hai un progetto Google Cloud esistente, creane uno nuovo nella consoleGoogle Cloud .
- Vai alla pagina Identity Platform Marketplace
nella console Google Cloud .
Vai alla pagina Identity Platform Marketplace - Nella pagina Identity Platform Marketplace, fai clic su Abilita identità cliente.
- Vai alla pagina Utenti di Customer Identity
nella console Google Cloud .
Vai alla pagina Utenti - In alto a destra, fai clic sui dettagli di configurazione dell'applicazione.
Copia i dettagli di configurazione dell'applicazione nella tua applicazione web.
- Vai alla consoleGoogle Cloud .
Modifica il file
backend/app.yaml
per aggiungereGOOGLE_CLOUD_PROJECT : 'PROJECT_ID'
nella sezioneenv_variables
:Nel file
frontend/main.js
, configura il widget di accesso FirebaseUI selezionando i provider che vuoi offrire ai tuoi utenti.Nella console Google Cloud , attiva i fornitori che hai scelto di mantenere:
- Vai alla pagina Provider di Customer Identity nella console Google Cloud .
Vai alla pagina Provider - Fai clic su Aggiungi un provider.
- Nell'elenco a discesa Seleziona un fornitore, seleziona i fornitori che vuoi utilizzare.
- Accanto ad Attivato, fai clic sul pulsante per attivare il provider.
- Per i provider di identità di terze parti, inserisci l'ID e il secret del provider dal sito per sviluppatori del provider. La documentazione di Firebase fornisce istruzioni specifiche nelle sezioni "Prima di iniziare" delle guide di Facebook, Twitter e GitHub.
- Per le integrazioni SAML e OIDC, consulta la configurazione del tuo IdP.
- Vai alla pagina Provider di Customer Identity nella console Google Cloud .
Aggiungi il tuo dominio all'elenco dei domini autorizzati in Identity Platform:
- Vai alla pagina Impostazioni di Customer Identity nella console Google Cloud .
Vai alla pagina Impostazioni - In Domini autorizzati, fai clic su Aggiungi dominio.
Inserisci il dominio della tua app nel seguente formato:
[PROJECT_ID].appspot.com
Non includere
http://
prima del nome di dominio.
- Vai alla pagina Impostazioni di Customer Identity nella console Google Cloud .
Vai alla directory
backend
e completa la configurazione dell'applicazione:cd backend/
Installa le dipendenze in una directory
lib
nel tuo progetto:pip install -t lib -r requirements.txt
In
appengine_config.py
, il metodovendor.add()
registra le librerie nella directorylib
.Aggiungi il seguente URL come
backendHostURL
inmain.js
:http://localhost:8081
Vai alla directory principale dell'applicazione. Poi avvia il server di sviluppo:
dev_appserver.py frontend/app.yaml backend/app.yaml
Visita la pagina http://localhost:8080/ in un browser web.
- Modifica l'URL host di backend in
main.js
inhttps://backend-dot-[PROJECT_ID].appspot.com
. Sostituisci[PROJECT_ID]
con il tuo ID progetto. Esegui il deployment dell'applicazione utilizzando l'interfaccia a riga di comando di Google Cloud SDK:
gcloud app deploy backend/index.yaml frontend/app.yaml backend/app.yaml
Visualizza l'applicazione live all'indirizzo
https://[PROJECT_ID].appspot.com
.- 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.
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.
Se hai già installato e inizializzato l'SDK in un altro progetto,
imposta il progetto gcloud
sull'ID progetto App Engine che utilizzi
per Firenotes. Consulta la sezione Gestione delle configurazioni di Google Cloud SDK per
comandi specifici per aggiornare un progetto con lo strumento gcloud
.
Clonazione dell'app di esempio
Per scaricare il campione sulla tua macchina locale:
Aggiunta dell'interfaccia utente
Per configurare FirebaseUI per Identity Platform e attivare i provider di identità:
Installazione delle dipendenze
Esecuzione dell'applicazione in locale
Per eseguire l'applicazione localmente, utilizza il server di sviluppo locale di App Engine:
Autenticazione degli utenti sul server
Ora che hai configurato un progetto e inizializzato un'applicazione per lo sviluppo, puoi esaminare il codice per capire come recuperare e verificare i token ID di Identity Platform sul server.
Ottenere un token ID da Identity Platform
Il primo passaggio dell'autenticazione lato server consiste nel recuperare un token di accesso da
verificare. Le richieste di autenticazione vengono gestite con il listener onAuthStateChanged()
di Identity Platform:
Quando un utente ha eseguito l'accesso, il metodo getToken()
di Identity Platform nel
callback restituisce un token ID di Identity Platform sotto forma di token web
JSON (JWT).
Verifica dei token sul server
Dopo l'accesso di un utente, il servizio frontend recupera le note esistenti nel blocco note dell'utente tramite una richiesta AJAX GET
. Ciò richiede l'autorizzazione per
accedere ai dati dell'utente, pertanto il JWT viene inviato nell'intestazione Authorization
della
richiesta utilizzando lo schema Bearer
:
Prima che il client possa accedere ai dati del server, il server deve verificare che il token sia
firmato da Identity Platform. Puoi verificare questo token utilizzando la
libreria di autenticazione Google per Python.
Utilizza la funzione verify_firebase_token
della libreria di autenticazione per verificare il token di autenticazione e estrarre le rivendicazioni:
Ogni IdP invia un insieme diverso di attestazioni, ma ognuno ha almeno un'attestazione sub
con un ID utente univoco e un'attestazione che fornisce alcune informazioni del profilo, come name
o email
, che puoi utilizzare per personalizzare l'esperienza utente nella tua app.
Gestione dei dati utente in Datastore
Dopo aver autenticato un utente, devi archiviare i suoi dati in modo che vengano conservati dopo la fine di una sessione con accesso. Le sezioni seguenti spiegano come archiviare una nota come entità Datastore e separare le entità per ID utente.
Creazione di entità per archiviare i dati utente
Puoi creare un'entità in Datastore dichiarando una
classe modello NDB con
determinate proprietà come numeri interi o stringhe. Datastore indicizza le entità per tipo; nel caso di Firenotes, il tipo di ogni entità è Note
.
Ai fini delle query, ogni Note
viene memorizzato con un nome chiave, ovvero l'ID utente ottenuto dalla rivendicazione sub
nella sezione precedente.
Il seguente codice mostra come impostare le proprietà di un'entità, sia con il metodo costruttore per la classe del modello quando l'entità viene creata sia tramite l'assegnazione di singole proprietà dopo la creazione:
Per scrivere il Note
appena creato in Datastore, chiama il metodo put()
sull'oggetto note
.
Recupero dei dati utente
Per recuperare i dati utente associati a un determinato ID utente, utilizza il metodo NDB
query()
per cercare nel database le note nello stesso gruppo di entità.
Le entità nello stesso gruppo o
percorso degli antenati
condividono un nome di chiave comune, che in questo caso è l'ID utente.
Puoi quindi recuperare i dati della query e visualizzare le note nel client:
Deployment dell'app
Hai integrato correttamente Identity Platform con la tua applicazione App Engine. Per visualizzare l'applicazione in esecuzione in un ambiente di produzione live:
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto App Engine:
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.
Per eliminare il progetto: