Come funziona l'autorizzazione dell'utente

Se non hai mai utilizzato i servizi di identità o l'autorizzazione Google, leggi la Panoramica.

Google offre una libreria JavaScript che include funzionalità di autorizzazione per aiutarti a gestire gli ambiti, ottenere il consenso degli utenti e utilizzare più facilmente i flussi OAuth 2.0 standard. L'applicazione web, in esecuzione nel browser dell'utente, utilizza questa libreria per gestire il flusso implicito OAuth 2.0 o per avviare il flusso del codice di autorizzazione che termina sulla tua piattaforma di backend.

Ambiti solo autenticazione

Diversi ambiti vengono utilizzati solo per l'autenticazione degli utenti: email, profile e openid. Se la tua app utilizza solo questi ambiti, valuta se un token ID JWT e la funzionalità Accedi con Google per la registrazione e l'accesso degli utenti soddisfano le tue esigenze. Nella maggior parte dei casi, questo è il metodo più semplice e diretto disponibile per l'autenticazione utente.

Termini e concetti chiave

Queste guide presuppongono che tu abbia una conoscenza di base dei concetti di OAuth 2.0 e degli standard IETF come RFC6749. Nelle guide all'autorizzazione vengono utilizzati i seguenti termini:

  • Il token di accesso è una credenziale di breve durata per utente emessa da Google che viene utilizzata per chiamare in modo sicuro le API di Google e accedere ai dati utente.
  • Il codice di autorizzazione è un codice temporaneo emesso da Google per identificare in modo sicuro i singoli utenti che accedono ai loro Account Google da un browser. La tua piattaforma di backend scambia questo codice per i token di accesso e di aggiornamento.
  • Il token di aggiornamento è una credenziale di lunga durata per utente emessa da Google, che viene archiviata in modo sicuro sulla tua piattaforma e può essere utilizzata per ottenere un nuovo token di accesso valido anche in assenza dell'utente.
  • L'ambito limita i token a una quantità definita e limitata di dati utente. Per ulteriori informazioni, consulta Ambiti OAuth 2.0 per API di Google.
  • La modalità popup è un flusso del codice di autorizzazione basato su un callback di JavaScript in esecuzione nel browser dell'utente. Google richiama il tuo gestore di callback, che è poi responsabile dell'invio del codice di autorizzazione alla tua piattaforma. Sei tu a decidere come procedere.
  • La modalità di reindirizzamento è un flusso di codice di autorizzazione basato su reindirizzamenti HTTP. Lo user-agent viene prima reindirizzato a Google, mentre un secondo reindirizzamento da Google all'endpoint del codice di autorizzazione della tua piattaforma include il codice.

La durata dei token viene impostata da Google in qualità di emittente. A causa di vari fattori, la durata esatta può variare.

Flussi OAuth 2.0

Vengono discussi due flussi, implicito e codice di autorizzazione. Entrambi restituiscono un token di accesso adatto all'utilizzo con le API di Google.

Si consiglia il flusso del codice di autorizzazione in quanto offre una maggiore sicurezza agli utenti. Questo flusso restituisce anche un token di aggiornamento che può essere utilizzato per ottenere token di accesso senza che l'utente sia presente, consentendo alla piattaforma di eseguire più facilmente azioni asincrone come l'invio di un promemoria SMS di una riunione imminente pianificata all'ultimo minuto. Scegli un modello di autorizzazione spiega in modo più dettagliato le differenze tra i due flussi.

La libreria JavaScript dei Servizi di identità Google è conforme allo standard OAuth 2.0 per:

  • Gestisci il flusso implicito per consentire alla tua app web nel browser di ottenere in modo facile e veloce da Google un token di accesso necessario per chiamare le API di Google.
  • avviare il flusso del codice di autorizzazione dal browser dell'utente.

Passaggi comuni

Il flusso del codice implicito e del codice di autorizzazione inizia allo stesso modo:

  1. La tua app richiede l'accesso a uno o più ambiti.
  2. Google mostra una finestra di dialogo per il consenso all'utente e, se necessario, esegue prima l'accesso all'Account Google.
  3. L'utente approva individualmente ogni ambito richiesto.

Ogni flusso termina quindi con passaggi diversi.

Quando utilizzi il flusso implicito

  • Google utilizza un gestore di callback per notificare alla tua app l'esito del consenso e restituire un token di accesso per tutti gli ambiti approvati.

Quando utilizzi il flusso del codice di autorizzazione

  • Google risponde con un codice di autorizzazione per utente:
    • In modalità di reindirizzamento, il codice viene restituito all'endpoint del codice di autorizzazione della piattaforma.
    • In modalità popup, il codice viene restituito al gestore di callback dell'app nel browser, senza che gli utenti debbano uscire dal sito web.
  • A partire dal Passaggio 4: gestisci la risposta del server OAuth 2.0, la tua piattaforma di backend completa uno scambio server-server con Google, con il risultato che alla tua piattaforma vengono restituiti un token di aggiornamento per utente e un token di accesso.

Prima di ottenere un token di accesso, i singoli utenti devono concedere alla tua app il consenso per accedere agli ambiti richiesti. A questo scopo, Google visualizza una finestra di dialogo per il consenso durante il passaggio 2 precedente e registra il risultato in myaccount.google.com/permissions.

Il nome, il logo, le norme sulla privacy, i Termini di servizio e gli ambiti richiesti dell'app vengono mostrati all'utente insieme alla possibilità di approvare o annullare la richiesta.

Nella Figura 1 è mostrata la finestra di dialogo per il consenso per un singolo ambito. Quando viene richiesto un singolo ambito, non sono necessarie caselle di controllo per approvare o rifiutare un ambito.

Finestra di dialogo per il consenso degli utenti con i pulsanti Annulla o Continua e un singolo ambito, non vengono mostrate caselle di controllo.

Figura 1: finestra di dialogo per il consenso degli utenti con un singolo ambito.

Nella figura 2 è mostrata la finestra di dialogo per il consenso per più ambiti. Quando viene richiesto più di un ambito, sono necessarie singole caselle di controllo per consentire all'utente di approvare o rifiutare ciascun ambito.

Finestra di dialogo per il consenso degli utenti con i pulsanti Annulla o Continua e più ambiti, ogni ambito ha un selettore di caselle di controllo.

Figura 2: finestra di dialogo per il consenso degli utenti con più ambiti.

Account utente

Per registrare il consenso e emettere un token di accesso, è necessario un Account Google. In precedenza, i singoli utenti devono essersi autenticati su Google accedendo a un Account Google.

Anche se non è obbligatorio, è consigliabile utilizzare Accedi con Google per registrarti e accedere alla tua app web o alla tua piattaforma di backend. In questo modo si riduce l'attrito per l'utente riducendo al minimo il numero di passaggi richiesti e, facoltativamente, puoi associare facilmente i token di accesso ai singoli account sulla tua piattaforma.

Ad esempio, l'utilizzo di Accedi con Google consente di creare una sessione per l'Account Google attiva, evitando così di dover chiedere all'utente in un secondo momento di accedere a un Account Google quando effettua una richiesta di autorizzazione. Se scegli di autenticare gli utenti nella tua app con altri mezzi, ad esempio nome utente e password, o altri provider di identità, dovranno comunque accedere prima a un Account Google per ottenere il consenso.

L'aggiunta di un suggerimento di accesso durante l'inizializzazione dell'autorizzazione, in genere l'indirizzo email dell'Account Google dell'utente, consente a Google di saltare la visualizzazione del selettore account, salvando agli utenti un passaggio. La credenziale del token ID restituita da Accedi con Google contiene l'indirizzo email dell'utente.

Le app web in esecuzione solo nel browser potrebbero affidarsi esclusivamente a Google per l'autenticazione utente, scegliendo di non implementare un sistema di gestione degli account utente. In questo scenario, noto come flusso implicito, non è necessario associare un token di aggiornamento a un account utente e all'archiviazione sicura di gestione.

In alternativa, il flusso del codice di autorizzazione richiede un sistema di account utente. I token di aggiornamento per utente devono essere associati a un singolo account sulla tua piattaforma di backend e archiviati per un utilizzo futuro. Le modalità di implementazione, utilizzo e gestione di un sistema di account utente sono esclusive della tua piattaforma e non vengono trattate in modo più dettagliato.

Gli utenti possono visualizzare o revocare il consenso in qualsiasi momento dalle impostazioni del proprio Account Google.

Facoltativamente, la tua app web o la tua piattaforma può chiamare google.accounts.oauth2.revoke per revocare i token e rimuovere il consenso dell'utente, utile quando un utente elimina il proprio account dalla tua piattaforma.

Altre opzioni di autorizzazione

In alternativa, i browser possono ottenere token di accesso utilizzando il flusso implicito chiamando direttamente gli endpoint OAuth 2.0 di Google, come descritto da OAuth 2.0 per le applicazioni web lato client.

Analogamente, per il flusso del codice di autorizzazione, puoi scegliere di implementare metodi personalizzati e seguire i passaggi descritti in Utilizzare OAuth 2.0 per applicazioni server web.

In entrambi i casi, consigliamo vivamente di utilizzare la libreria dei Servizi di identità Google per ridurre i tempi e gli sforzi di sviluppo e per ridurre al minimo i rischi per la sicurezza, come quelli descritti nell'articolo Best practice attuale per la sicurezza OAuth 2.0.