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 mostra 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 dai tuoi 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.

Utente App Google / Browser Il tuo Auth Endpoint 1. L'utente avvia il collegamento 2. Reindirizza all'endpoint di autenticazione (GET) client_id, redirect_uri, state, scope 3. Visualizza la schermata di accesso e consenso 4. L'utente esegue l'autenticazione e concede il consenso 5. Reindirizza di nuovo a Google con il token (GET) access_token, state 6. Token utente del negozio 7. Accedere alle risorse utente
Figura 1. La sequenza di eventi nel flusso implicito OAuth 2.0 per il collegamento dell'Account Google.

Ruoli e responsabilità

La seguente tabella definisce i ruoli e le responsabilità degli attori nel flusso implicito OAuth del collegamento dell'Account Google (GAL). Tieni presente che in GAL, Google agisce in qualità di client OAuth, mentre il tuo servizio agisce in qualità di 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 servizio.
Il tuo endpoint di autorizzazione Server di autorizzazione Autentica gli utenti, ottiene il loro consenso ed emette token di accesso di lunga durata direttamente a Google.
URI di reindirizzamento Google Endpoint di callback Riceve il reindirizzamento dell'utente dal tuo servizio di autorizzazione con i valori access_token e state 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 accede, se non ha già eseguito l'accesso, e concede a Google l'autorizzazione ad accedere ai propri dati con la tua API, se non ha già concesso l'autorizzazione.
  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 servizio verifica che il token di accesso conceda a Google l'autorizzazione per accedere all'API e completa la chiamata API.

Ricetta di implementazione

Per implementare il flusso implicito:

Passaggio 1: gestisci le richieste di autorizzazione

Quando Google avvia il collegamento dell'account, reindirizza l'utente all'endpoint di autorizzazione. Per i contratti di protocollo dettagliati e i requisiti dei parametri, consulta l'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_PARTNER_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PARTNER_ID
    • Verifica che response_type sia token.
  2. Autentica l'utente:

    • Controlla se l'utente ha eseguito l'accesso al tuo servizio.
    • Se l'utente non ha eseguito l'accesso, invitalo a completare la procedura di accesso o registrazione.
  3. Genera token di accesso:

    • Crea un token di accesso univoco e non intuibile associato all'utente e al client.
  4. Reindirizza di nuovo 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.