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 illustra una semplice applicazione per prendere appunti chiamata Firenotes che archivia le note degli utenti nei loro notebook personali. Notebooks vengono archiviati per utente e identificati dall'ID Identity Platform univoco di ogni utente. L'applicazione ha i 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 le attività di autenticazione e UI. 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 archiviare le credenziali in un database di tua scelta.
Firenotes si basa sul Flask framework dell'applicazione web. L'app di esempio utilizza Flask per la sua semplicità e facilità d'uso, ma i concetti e le tecnologie esplorate sono applicabili indipendentemente dal framework utilizzato.
Obiettivi
Al termine di questo tutorial, avrai completato le seguenti attività:
- Configurare l'interfaccia utente con FirebaseUI per Identity Platform.
- Ottenere un token ID Identity Platform e verificarlo utilizzando l'autenticazione lato server.
- Archiviare le credenziali utente e i dati associati in Datastore.
- Eseguire una query su un database utilizzando la libreria client NDB.
- Eseguire 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 sull'installazione dell'ultima versione di Python, consulta Configurazione di un ambiente di sviluppo Python per Google Cloud.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Installa Google Cloud CLI.
-
Configura gcloud CLI per utilizzare la tua identità federata.
Per ulteriori informazioni, vedi Accedi a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
Se hai già installato e inizializzato l'SDK in un altro progetto, imposta il progetto gcloud sull'ID progetto App Engine che stai utilizzando per Firenotes. Per i comandi specifici per aggiornare un progetto con lo strumento gcloud, consulta Gestire le configurazioni di Google Cloud SDK per.
Clonazione dell'app di esempio
Per scaricare l'esempio sulla tua macchina locale:
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 l'esempio come file ZIP ed estrarlo.
Vai alla directory contenente il codice campione:
cd python-docs-samples/appengine/standard/firebase/firenotes
Aggiunta dell'interfaccia utente
Per configurare FirebaseUI per Identity Platform e abilitare i provider di identità:
Aggiungi Identity Platform alla tua app seguendo questi passaggi:
- Vai alla Google Cloud console.
Vai alla Google Cloud console - Seleziona il Google Cloud progetto 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 esistente Google Cloud , crea un nuovo progetto nella Google Cloud console.
- Vai alla pagina Identity Platform Marketplace
nella Google Cloud console.
Vai alla pagina Identity Platform Marketplace - Nella pagina Identity Platform Marketplace, fai clic su Abilita identità cliente.
- Vai alla pagina Utenti di identità cliente nella Google Cloud console.
Vai alla pagina Utenti - In alto a destra, fai clic su Dettagli di configurazione dell'applicazione.
Copia i dettagli di configurazione dell'applicazione nella tua applicazione web.
- Vai alla Google Cloud console.
Modifica il file
backend/app.yamlper aggiungereGOOGLE_CLOUD_PROJECT : 'PROJECT_ID'nellaenv_variablessezione:Nel file
frontend/main.js, configura il widget di accesso FirebaseUI selezionando i provider che vuoi offrire ai tuoi utenti.Nella Google Cloud console, abilita i provider che hai scelto di conservare:
- Vai alla pagina Provider di identità cliente nella Google Cloud console.
Vai alla pagina Provider - Fai clic su Aggiungi un provider.
- Nell'elenco a discesa Seleziona un provider, seleziona i provider che vuoi utilizzare.
- Accanto a 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 Facebook, Twitter, e GitHub.
- Per le integrazioni SAML e OIDC, consulta la configurazione del tuo IdP.
- Vai alla pagina Provider di identità cliente nella Google Cloud console.
Aggiungi il tuo dominio all'elenco dei domini autorizzati in Identity Platform:
- Vai alla pagina Impostazioni di identità cliente nella Google Cloud console.
Vai alla pagina Impostazioni - In Domini autorizzati, fai clic su Aggiungi dominio.
Inserisci il dominio della tua app nel seguente formato:
[PROJECT_ID].appspot.comNon includere
http://prima del nome di dominio.
- Vai alla pagina Impostazioni di identità cliente nella Google Cloud console.
Installazione delle dipendenze
Vai alla directory
backende completa la configurazione dell'applicazione:cd backend/Installa le dipendenze in una directory
libnel tuo progetto:pip install -t lib -r requirements.txtIn
appengine_config.py, il metodovendor.add()registra le librerie nella directorylib.
Esecuzione dell'applicazione in locale
Per eseguire l'applicazione in locale, utilizza il server di sviluppo locale di App Engine:
Aggiungi il seguente URL come
backendHostURLinmain.js:http://localhost:8081Vai alla directory principale dell'applicazione. Quindi, avvia il server di sviluppo:
dev_appserver.py frontend/app.yaml backend/app.yamlVisita http://localhost:8080/ in un browser web.
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 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 Identity Platform sotto forma di token web JSON (JWT).
Verificare i token sul server
Dopo che un utente ha eseguito l'accesso, il servizio frontend recupera le note esistenti nel notebook dell'utente tramite una richiesta AJAX GET. Per accedere ai dati dell'utente è necessaria l'autorizzazione, quindi 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 di Google per Python.
Utilizza la libreria di autenticazione
verify_firebase_token
funzione per verificare il token di autenticazione e estrarre le attestazioni:
Ogni provider di identità 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 sul profilo, come name o email, che puoi utilizzare per personalizzare l'esperienza utente nella tua app.
Gestire i dati utente in Datastore
Dopo aver autenticato un utente, devi archiviare i suoi dati in modo che rimangano persistenti al termine di una sessione con accesso. Le sezioni seguenti spiegano come archiviare una nota come entità Datastore e separare le entità per ID utente.
Creare entità per archiviare i dati utente
Puoi creare un'entità in Datastore dichiarando una
classe di 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 archiviata con un nome chiave, ovvero l'
ID utente ottenuto dall'attestazione sub nella sezione precedente.
Il seguente codice mostra come impostare le proprietà di un'entità, sia con il metodo del costruttore per la classe di modello quando viene creata l'entità sia tramite l'assegnazione di singole proprietà dopo la creazione:
Per scrivere la Note appena creata in Datastore, chiama il metodo put() sull'oggetto note.
Recuperare i dati utente
Per recuperare i dati utente associati a un ID utente specifico, utilizza il metodo query() NDB per cercare nel database le note nello stesso gruppo di entità.
Le entità nello stesso gruppo, o
percorso predecessore,
condividono un nome chiave comune, che in questo caso è l'ID utente.
Puoi quindi recuperare i dati della query e visualizzare le note nel client:
Eseguire il deployment dell'app
Hai integrato correttamente Identity Platform con l'applicazione App Engine. Per visualizzare l'applicazione in esecuzione in un ambiente di produzione live:
- Modifica l'URL dell'host di backend in
main.jsinhttps://backend-dot-[PROJECT_ID].appspot.com. Sostituisci[PROJECT_ID]con l'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.yamlVisualizza l'applicazione live all'indirizzo
https://[PROJECT_ID].appspot.com.
Libera spazio
Per evitare che al tuo Google Cloud account 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:
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.