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.
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:
- 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.
- 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.
- 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:
Convalida la richiesta:
- Verifica che
client_idcorrisponda all'ID client assegnato a Google. - Verifica che
redirect_uricorrisponda 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_typesiatoken.
- Verifica che
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.
Genera token di accesso:
- Crea un token di accesso univoco e non intuibile associato all'utente e al client.
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 esserebearer.state: il valore dello stato non modificato ricevuto da Google.
- Reindirizza il browser all'URL fornito in
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:
- Accesso a un account collegato con Google One Tap.
- Abbonamento senza problemi su AndroidTV.
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:
- Estrai il token di accesso dall'intestazione Autorizzazione e restituisci le informazioni per l'utente associato al token di accesso.
- 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: 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.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Se il token di accesso è valido, restituisce e invia una risposta HTTP 200 con il seguente oggetto JSON nel corpo dell'HTTPS risposta:
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.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }risposta endpoint userinfo subUn ID univoco che identifica l'utente nel sistema. emailIndirizzo email dell'utente. given_nameFacoltativo:nome dell'utente. family_nameFacoltativo:il cognome dell'utente. nameFacoltativo:nome completo dell'utente. picture(Facoltativo) Immagine del profilo dell'utente.