Il collegamento dell'Account Google consente ai proprietari di Account Google di connettersi in modo rapido, semplice e sicuro ai tuoi servizi e di condividere dati con Google.
L'opzione Accedi con un account collegato attiva l'opzione Accedi con Google One Tap per gli utenti che hanno già collegato il proprio Account Google al tuo servizio. Questo migliora l'esperienza degli utenti, in quanto possono accedere con un solo clic, senza dover reinserire nome utente e password. Inoltre, riduce le possibilità che gli utenti creino account duplicati nel tuo servizio.
Requisiti
Per implementare l'accesso con account collegato, devi soddisfare i seguenti requisiti:
- Disponi di un'implementazione del collegamento OAuth dell'Account Google che supporta il flusso del codice di autorizzazione OAuth 2.0. L'implementazione 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 precedentemente collegato il proprio account Google al proprio account nel servizio.
- Attiva la visualizzazione degli account collegati durante il flusso di accesso One Tap.
- L'utente visualizza una richiesta di accesso One Tap con un'opzione per accedere al servizio con il suo account collegato.
- Se l'utente sceglie di continuare con l'account collegato, Google invia una richiesta all'endpoint del 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 Google.
- Scambia il codice di autorizzazione Google con un token ID Google contenente informazioni sull'Account Google dell'utente.
- Al termine del flusso, l'app riceve anche un token ID che viene confrontato con l'identificatore utente nel token ID ricevuto dal server per consentire all'utente di accedere alla tua app.
Implementare l'accesso con account collegato nell'app per Android
Per supportare l'accesso con un account collegato nell'app per Android, segui le istruzioni riportate nella guida all'implementazione di Android.
Gestire le richieste di codice di autorizzazione da Google
Google invia una richiesta POST all'endpoint del 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 ti sia stato concesso a Google, identificato dal 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
Il tuo endpoint di scambio di token deve essere in grado di gestire i seguenti parametri della richiesta:
Parametri endpoint token | |
---|---|
code |
Codice di autorizzazione Google OAuth2 obbligatorio |
client_id |
ID client obbligatorio che hai fornito a Google |
client_secret |
Client secret obbligatorio che hai inviato a Google |
access_token |
Obbligatorio Token di accesso che hai emesso per Google. Lo userai 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 di token deve rispondere alla richiesta POST nel seguente modo:
- Verifica che l'autorizzazione
access_token
sia stata concessa a Google identificata 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
Se si verifica una 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, quindi il server non può procedere con la richiesta. Questo errore può essere restituito anche se la richiesta include un parametro non supportato o lo ripete |
401 | {"error": "invalid_request"} |
L'autenticazione client non è riuscita, ad esempio se la richiesta contiene un ID client o un secret non valido |
401 | {"error": "invalid_token"}
Includi "WWW-Authentication: Bearer" verifica dell'autenticazione nell'intestazione della risposta |
Il token di accesso partner non è valido. |
403 | {"error": "insufficient_permission"}
Includi "WWW-Authentication: Bearer" verifica dell'autenticazione nell'intestazione della risposta |
Il token di accesso partner non contiene gli ambiti necessari per eseguire il token OAuth reciproco |
500 | {"error": "internal_error"} |
Errore del server |
La risposta di errore deve contenere i seguenti campi :
Campi di risposta dell'errore | |
---|---|
error |
Stringa di errore obbligatoria |
error_description |
Descrizione leggibile dell'errore |
error_uri |
URI che fornisce ulteriori dettagli sull'errore |
Esempio di risposta con 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."
}
Scambia codice di autorizzazione con 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 New Actions on Google App |
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 che contiene 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 fornito da Google che la tua applicazione invia per autorizzare una richiesta 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 dell'accesso a un account collegato |
token_type |
Il tipo di token restituito. Al momento, il valore di questo campo è sempre impostato su Bearer |
Esempio di risposta
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
convalida e decodifica l'asserzione JWT
Puoi convalidare e decodificare l'asserzione JWT utilizzando un Libreria di decodifica JWT per la tua lingua. Utilizza le funzionalità di Chiavi pubbliche di Google, disponibili in JWK o formati PEM, per verificare la firma del token.
Una volta decodificata, l'asserzione JWT è simile all'esempio seguente:
{ "sub": "1234567890", // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "email_verified": true, // true, if Google has verified the email address "hd": "example.com", // If present, the host domain of the user's GSuite email address // If present, a URL to user's profile picture "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ", "locale": "en_US" // User's locale, from browser or phone settings }
Oltre a verificare la firma del token, verifica che l'asserzione
l'emittente (campo iss
) è https://accounts.google.com
, che il pubblico
(campo aud
) è l'ID cliente che ti è stato assegnato e che il token non è scaduto
(campo exp
).
Utilizzando i campi email
, email_verified
e hd
puoi determinare se
Google ospita un indirizzo email ed è autorevole. Nei casi in cui Google
ufficiale che l'utente sia attualmente noto per essere il legittimo proprietario dell'account
e puoi saltare l'uso della password o altri metodi di verifica. In caso contrario, questi metodi
può essere utilizzato per verificare l'account prima del collegamento.
Casi in cui Google è autorevole:
email
ha un suffisso@gmail.com
, questo è un account Gmail.email_verified
è true ehd
è impostato, questo è un account G Suite.
Gli utenti possono registrarsi per creare Account Google senza utilizzare Gmail o G Suite. Quando
email
non contiene un suffisso @gmail.com
e hd
non è presente
autoritativi e con password o altri metodi di verifica per verificare
per l'utente. Il valore email_verified
può anche essere vero perché Google ha verificato inizialmente il valore
all'utente quando è stato creato l'account Google, ma la proprietà della terza parte
l'account email potrebbe essere cambiato da allora.