Accesso ad account collegato

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.

  1. Attiva la visualizzazione degli account collegati durante il flusso di accesso One Tap.
  2. L'utente visualizza una richiesta di accesso One Tap con un'opzione per accedere al servizio con il suo account collegato.
  3. 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.
  4. Scambia il codice di autorizzazione Google con un token ID Google contenente informazioni sull'Account Google dell'utente.
  5. 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.
di Gemini Advanced.
Accesso ad account collegato.
. Figura 1. Flusso di accesso all'account collegato. Se l'utente ha più account a cui ha eseguito l'accesso sul proprio dispositivo, può visualizzare un selettore account e viene indirizzato alla visualizzazione Accesso all'account collegato solo se seleziona un account collegato.

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 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

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 e hd è 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.