Accesso ad account collegato

Il collegamento dell'Account Google consente ai titolari di Account Google di connettersi ai tuoi servizi e condividere dati con Google in modo rapido, semplice e sicuro.

L'accesso con account collegato attiva l'accesso One Tap con Google per gli utenti che hanno già collegato il proprio Account Google al tuo servizio. In questo modo, l'esperienza degli utenti migliora perché possono accedere con un solo clic, senza dover inserire di nuovo nome utente e password. Inoltre, riduce le probabilità che gli utenti creino account duplicati sul tuo servizio.

Requisiti

Per implementare l'accesso con account collegato, devi soddisfare i seguenti requisiti:

  • Hai un'implementazione del collegamento OAuth dell'Account Google che supporta il flusso del codice di autorizzazione OAuth 2.0. L'implementazione di OAuth deve includere i seguenti endpoint:
    • Endpoint di autorizzazione per gestire le richieste di autorizzazione.
    • Endpoint token per gestire la richiesta di token di accesso e di aggiornamento.
    • Endpoint userinfo per recuperare le informazioni di base dell'account dell'utente collegato che vengono mostrate all'utente durante la procedura di accesso all'account collegato.
  • Hai un'app per Android.

Come funziona

Prerequisito : l'utente ha collegato in precedenza il proprio Account Google al proprio account sul tuo servizio.

  1. Attiva la visualizzazione degli account collegati durante il flusso di accesso con un solo tocco.
  2. All'utente viene mostrata una richiesta di accesso One Tap con la possibilità di accedere al tuo servizio con il proprio account collegato.
  3. Se l'utente sceglie di continuare con l'account collegato, Google invia una richiesta al tuo endpoint token per salvare un codice di autorizzazione. La richiesta contiene il token di accesso dell'utente emesso dal tuo servizio e un codice di autorizzazione di Google.
  4. Sostituisci il codice di autorizzazione di Google con un token ID Google contenente informazioni sull'Account Google dell'utente.
  5. Al termine del flusso, la tua app riceve anche un token ID che confronti con l'identificatore utente nel token ID ricevuto dal tuo server per consentire all'utente di accedere alla tua app.
Accesso all'account collegato.
Figura 1. Flusso di accesso all'account collegato. Se l'utente ha eseguito l'accesso a più account sul dispositivo, potrebbe visualizzare un selettore di account e verrà indirizzato alla visualizzazione Accesso con account collegato solo se seleziona un account collegato.

Implementare l'accesso con account collegato nella tua app per Android

Per supportare l'accesso con account collegato nella tua app per Android, segui le istruzioni riportate nella guida all'implementazione per Android.

Gestire le richieste di codici di autorizzazione da Google

Google invia una richiesta POST al tuo endpoint token per salvare un codice di autorizzazione che scambi con il token ID dell'utente. La richiesta contiene il token di accesso dell'utente e un codice di autorizzazione OAuth2 emesso da Google.

Prima di salvare il codice di autorizzazione, devi verificare che il token di accesso sia stato concesso da te a Google, identificato da client_id.

Richiesta HTTP

Richiesta di esempio

POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN

L'endpoint di scambio token deve essere in grado di gestire i seguenti parametri di richiesta:

Parametri dell'endpoint token
code Obbligatorio codice di autorizzazione OAuth2 di Google
client_id Obbligatorio ID client che hai emesso per Google
client_secret Obbligatorio Client secret che hai emesso per Google
access_token Obbligatorio Token di accesso che hai emesso per Google. Lo utilizzerai per ottenere il contesto dell'utente
grant_type Il valore obbligatorio DEVE essere impostato su urn:ietf:params:oauth:grant-type:reciprocal

L'endpoint di scambio token deve rispondere alla richiesta POST nel seguente modo:

  • Verifica che il access_token sia stato concesso a Google identificato dal client_id.
  • Rispondi con una risposta HTTP 200 (OK) se la richiesta è valida e il codice di autenticazione viene scambiato correttamente con un token ID Google oppure con un codice di errore HTTP se la richiesta non è valida.

Risposta HTTP

Operazione riuscita

Restituire il codice di stato HTTP 200 OK

Esempio di risposta di successo
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}

Errori

In caso di richiesta HTTP non valida, rispondi con uno dei seguenti codici di errore HTTP:

Codice di stato HTTP Corpo Descrizione
400 {"error": "invalid_request"} Nella richiesta manca un parametro, pertanto il server non può procedere. Questo valore può essere restituito anche se la richiesta include un parametro non supportato o ne ripete uno.
401 {"error": "invalid_request"} L'autenticazione client non è riuscita, ad esempio se la richiesta contiene un ID client o un client secret non valido
401 {"error": "invalid_token"}

Includi la verifica dell'autenticazione "WWW-Authentication: Bearer" nell'intestazione di risposta

Il token di accesso partner non è valido.
403 {"error": "insufficient_permission"}

Includi la verifica dell'autenticazione "WWW-Authentication: Bearer" nell'intestazione di risposta

Il token di accesso del partner non contiene gli ambiti necessari per eseguire l'OAuth reciproco
500 {"error": "internal_error"} Errore del server

La risposta all'errore deve contenere i seguenti campi :

Campi di risposta di errore
error Obbligatorio Stringa di errore
error_description Descrizione leggibile dell'errore
error_uri URI che fornisce ulteriori dettagli sull'errore
Esempio di risposta di errore 400
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "error": "invalid_request",
  "error_description": "Request was missing the 'access_token' parameter."
}

Scambiare il codice di autorizzazione con un token ID

Dovrai scambiare il codice di autorizzazione che hai ricevuto con un token ID Google contenente informazioni sull'Account Google dell'utente.

Per scambiare un codice di autorizzazione con un token ID Google, chiama l'endpoint https://oauth2.googleapis.com/token e imposta i seguenti parametri:

Campi di richiesta
client_id Obbligatorio L'ID client ottenuto dalla pagina Credenziali della console API. In genere si tratta della credenziale con il nome Nuova app Azioni su Google
client_secret Obbligatorio Il client secret ottenuto dalla pagina Credenziali della console API
code Obbligatorio Il codice di autorizzazione inviato nella richiesta iniziale
grant_type Obbligatorio Come definito nella specifica OAuth 2.0, il valore di questo campo deve essere impostato su authorization_code.
Richiesta di esempio
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET

Google risponde a questa richiesta restituendo un oggetto JSON contenente un token di accesso di breve durata e un token di aggiornamento.

La risposta contiene i seguenti campi:

Campi di risposta
access_token Token di accesso emesso da Google che la tua applicazione invia per autorizzare una richiesta all'API di Google
id_token Il token ID contiene i dati dell'Account Google dell'utente. La sezione Convalida risposta contiene dettagli su come decodificare e convalidare la risposta del token ID
expires_in La durata rimanente del token di accesso in secondi
refresh_token Un token che puoi utilizzare per ottenere un nuovo token di accesso. I token di aggiornamento sono validi finché l'utente non revoca l'accesso
scope Il valore di questo campo è sempre impostato su openid per il caso d'uso Accesso con account collegato
token_type Il tipo di token restituito. Al momento, il valore di questo campo è sempre impostato su Bearer
Risposta di esempio
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8

{
  "access_token": "Google-access-token",
  "id_token": "Google-ID-token",
  "expires_in": 3599,
  "token_type": "Bearer",
  "scope": "openid",
  "refresh_token": "Google-refresh-token"
}


POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret

Convalida la risposta del token ID