Collegamento dell'Account Google con OAuth (flusso implicito - archiviato)

Per supportare il flusso implicito OAuth 2.0, il tuo servizio rende disponibile un endpoint di autorizzazione tramite HTTPS. Questo endpoint è responsabile dell'autenticazione e dell'ottenimento del consenso degli utenti per l'accesso ai dati. L'endpoint di autorizzazione presenta un'interfaccia utente di accesso agli utenti che non hanno ancora eseguito l'accesso e registra il consenso all'accesso richiesto.

Quando un'applicazione Google deve chiamare una delle API autorizzate del tuo servizio, Google utilizza questo endpoint per ottenere l'autorizzazione dagli utenti a chiamare queste API per loro conto.

Collegamento dell'Account Google: flusso implicito OAuth

Il seguente diagramma di sequenza descrive in dettaglio le interazioni tra l'utente, Google e gli endpoint del tuo servizio.

User Google App / Browser Your Auth Endpoint 1. User initiates linking 2. Redirect to Auth Endpoint (GET) client_id, redirect_uri, state, scope 3. Display Sign-in & Consent Screen 4. User Authenticates & Grants Consent 5. Redirect back to Google with Token (GET) access_token, state 6. Store user tokens 7. Access user resources
Figure 1. La sequenza di eventi nel flusso implicito OAuth 2.0 per il collegamento dell'Account Google.

Ruoli e responsabilità

La tabella seguente definisce i ruoli e le responsabilità degli attori nel flusso implicito OAuth di collegamento dell'Account Google (GAL). Tieni presente che in GAL Google funge da client OAuth, mentre il tuo servizio funge da provider di identità/servizi.

Attore / componente Ruolo GAL Responsabilità
App / server Google Client OAuth Avvia il flusso, riceve il token di accesso utilizzando un reindirizzamento del browser, e lo archivia in modo sicuro per accedere alle API del tuo servizio.
Endpoint di autorizzazione Server di autorizzazione Autentica gli utenti, ottiene il loro consenso ed emette token di accesso di lunga durata accesso direttamente a Google.
URI di reindirizzamento di Google Endpoint di richiamata Riceve il reindirizzamento dell'utente dal tuo servizio di autorizzazione con i access_token e state valori nel frammento dell'URL.

Una tipica sessione di flusso implicito OAuth 2.0 avviata da Google ha il seguente flusso:

  1. Google apre l'endpoint di autorizzazione nel browser dell'utente. L'utente esegue l'accesso, se non l'ha già fatto, e concede a Google l'autorizzazione ad accedere ai suoi dati con la tua API, se non l'ha già fatto.
  2. Il tuo servizio crea un token di accesso e lo restituisce a Google. Per farlo, reindirizza il browser dell'utente a Google con il token di accesso allegato alla richiesta.
  3. Google chiama le API del tuo servizio e allega il token di accesso a ogni richiesta. Il tuo servizio verifica che il token di accesso conceda a Google l'autorizzazione ad accedere all'API e poi completa la chiamata API.

Ricetta di implementazione

Per implementare il flusso implicito, segui questi passaggi.

Passaggio 1: gestisci le richieste di autorizzazione

Quando Google avvia il collegamento dell'account, reindirizza l'utente al tuo endpoint di autorizzazione. Per i contratti di protocollo dettagliati e i requisiti dei parametri, consulta Endpoint di autorizzazione.

Per gestire la richiesta, esegui le seguenti azioni:

  1. Convalida la richiesta:

    • Verifica che client_id corrisponda all'ID client assegnato a Google.
    • Verifica che redirect_uri corrisponda all'URL di reindirizzamento di Google previsto: none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
    • Verifica che response_type sia token.
  2. Autentica l'utente:

    • Verifica se l'utente ha eseguito l'accesso al tuo servizio.
    • Se l'utente non ha eseguito l'accesso, chiedigli di completare il flusso di accesso o registrazione.
  3. Genera il token di accesso:

    • Crea un token di accesso univoco e non indovinabile associato all'utente e al client.
  4. Reindirizza a Google:

    • Reindirizza il browser all'URL fornito in redirect_uri.
    • Aggiungi i seguenti parametri nel frammento di URL (hash):
      • access_token: il token di accesso che hai generato.
      • token_type: deve essere bearer.
      • state: il valore dello stato non modificato ricevuto da Google.
Gestire le richieste di informazioni utente

L'endpoint userinfo è una risorsa protetta da OAuth 2.0 che restituisce attestazioni sull'utente collegato. L'implementazione e l'hosting dell'endpoint userinfo sono facoltative, ad eccezione dei seguenti casi d'uso:

Dopo che il token di accesso è stato recuperato correttamente dall'endpoint del token, Google invia una richiesta all'endpoint userinfo per recuperare le informazioni di base del profilo dell'utente collegato.

intestazioni delle richieste endpoint userinfo
Authorization header Il token di accesso di tipo Bearer.

Ad esempio, se l'endpoint userinfo è disponibile su https://myservice.example.com/userinfo, una richiesta potrebbe avere il seguente aspetto:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

Affinché l'endpoint userinfo possa gestire le richieste, segui questi passaggi:

  1. Estrai il token di accesso dall'intestazione Autorizzazione e restituisci le informazioni per l'utente associato al token di accesso.
  2. Se il token di accesso non è valido, restituisce un errore HTTP 401 Autorizzazione non autorizzata utilizzando l'intestazione della risposta WWW-Authenticate. Di seguito è riportato un esempio di risposta di errore userinfo:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    Se durante la procedura di collegamento viene restituito un errore 401 Autorizzazione o qualsiasi altra risposta di errore non riuscita durante la procedura di collegamento, l'errore non sarà recuperabile, il token recuperato verrà eliminato e l'utente dovrà avviare nuovamente la procedura di collegamento.
  3. Se il token di accesso è valido, restituisce e invia una risposta HTTP 200 con il seguente oggetto JSON nel corpo dell'HTTPS risposta:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    Se l'endpoint userinfo restituisce una risposta HTTP 200 riuscita, il token e le attestazioni recuperati vengono registrati in base all'Account Google dell'utente.

    risposta endpoint userinfo
    sub Un ID univoco che identifica l'utente nel sistema.
    email Indirizzo email dell'utente.
    given_name Facoltativo:nome dell'utente.
    family_name Facoltativo:il cognome dell'utente.
    name Facoltativo:nome completo dell'utente.
    picture (Facoltativo) Immagine del profilo dell'utente.