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.
- Attiva la visualizzazione degli account collegati durante il flusso di accesso con un solo tocco.
- All'utente viene mostrata una richiesta di accesso One Tap con la possibilità di accedere al tuo servizio con il proprio account collegato.
- 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.
- Sostituisci il codice di autorizzazione di Google con un token ID Google contenente informazioni sull'Account Google dell'utente.
- 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.](https://developer.android.com/static/identity/legacy/one-tap/images/linked-account-signin.png?hl=it)
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 dalclient_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