Collegamento dell'Account Google a OAuth

Gli account vengono collegati utilizzando i flussi OAuth 2.0 impliciti e codice di autorizzazione standard di settore. Il servizio deve supportare gli endpoint di autorizzazione e scambio di token conformi a OAuth 2.0.

In the implicit flow, Google opens your authorization endpoint in the user's browser. After successful sign in, you return a long-lived access token to Google. This access token is now included in every request sent from Google.

In the authorization code flow, you need two endpoints:

  • The authorization endpoint, which presents the sign-in UI to your users that aren't already signed in. The authorization endpoint also creates a short-lived authorization code to record users' consent to the requested access.

  • The token exchange endpoint, which is responsible for two types of exchanges:

    1. Exchanges an authorization code for a long-lived refresh token and a short-lived access token. This exchange happens when the user goes through the account linking flow.
    2. Exchanges a long-lived refresh token for a short-lived access token. This exchange happens when Google needs a new access token because the one it had expired.

Choose an OAuth 2.0 flow

Although the implicit flow is simpler to implement, Google recommends that access tokens issued by the implicit flow never expire. This is because the user is forced to link their account again after a token expires with the implicit flow. If you need token expiration for security reasons, we strongly recommend that you use the authorization code flow instead.

Design guidelines

This section describes the design requirements and recommendations for the user screen that you host for OAuth linking flows. After it's called by Google's app, your platform displays a sign in to Google page and account linking consent screen to the user. The user is directed back to Google's app after giving their consent to link accounts.

This figure shows the steps for a user to link their Google account
            to your authentication system. The first screenshot shows
            user-initiated linking from your platform. The second image shows
            user sign-in to Google, while the third shows the user consent and
            confirmation for linking their Google account with your app. The
            final screenshot shows a successfully linked user account in the
            Google app.
Figure 1. Account linking user sign in to Google and consent screens.

Requirements

  1. You must communicate that the user’s account will be linked to Google, not a specific Google product like Google Home or Google Assistant.

Recommendations

We recommend that you do the following:

  1. Display Google's Privacy Policy. Include a link to Google’s Privacy Policy on the consent screen.

  2. Data to be shared. Use clear and concise language to tell the user what data of theirs Google requires and why.

  3. Clear call-to-action. State a clear call-to-action on your consent screen, such as “Agree and link.” This is because users need to understand what data they're required to share with Google to link their accounts.

  4. Ability to cancel. Provide a way for users to go back or cancel, if they choose not to link.

  5. Clear sign-in process. Ensure that users have clear method for signing in to their Google account, such as fields for their username and password or Sign in with Google.

  6. Ability to unlink. Offer a mechanism for users to unlink, such as a URL to their account settings on your platform. Alternatively, you can include a link to Google Account where users can manage their linked account.

  7. Ability to change user account. Suggest a method for users to switch their account(s). This is especially beneficial if users tend to have multiple accounts.

    • If a user must close the consent screen to switch accounts, send a recoverable error to Google so the user can sign in to the desired account with OAuth linking and the implicit flow.
  8. Include your logo. Display your company logo on the consent screen. Use your style guidelines to place your logo. If you wish to also display Google's logo, see Logos and trademarks.

Crea il progetto

Per creare il tuo progetto in modo da utilizzare il collegamento dell'account:

  1. Go to the Google API Console.
  2. Fai clic su Crea progetto .
  3. Inserisci un nome o accetta il suggerimento generato.
  4. Conferma o modifica tutti i campi rimanenti.
  5. Fai clic su Crea .

Per visualizzare l'ID del progetto:

  1. Go to the Google API Console.
  2. Trova il tuo progetto nella tabella nella pagina di destinazione. L'ID progetto viene visualizzato nella colonna ID .

La procedura di collegamento dell'Account Google include una schermata per il consenso che indica agli utenti l'applicazione che richiede l'accesso ai loro dati, il tipo di dati richiesti e i termini applicabili. Devi configurare la schermata per il consenso OAuth prima di generare un ID client dell'API Google.

  1. Apri la pagina Schermata per il consenso OAuth della console API Google.
  2. Se richiesto, seleziona il progetto appena creato.
  3. Nella pagina "Schermata consenso OAuth", compila il modulo e fai clic sul pulsante "Salva".

    Nome dell'applicazione:il nome dell'applicazione che richiede il consenso. Il nome deve rispecchiare accuratamente la tua applicazione ed essere coerente con il nome dell'applicazione che gli utenti vedono altrove. Il nome dell'applicazione verrà visualizzato nella schermata del consenso per il collegamento dell'account.

    Logo dell'applicazione: un'immagine nella schermata per il consenso che aiuterà gli utenti a riconoscere la tua app. Il logo viene visualizzato nella schermata per il consenso del collegamento dell'account e nelle impostazioni dell'account

    Indirizzo email dell'assistenza:per consentire agli utenti di contattarti per domande sul loro consenso.

    Ambiti per le API di Google:gli ambiti consentono alla tua applicazione di accedere ai dati privati di Google dell'utente. Per il caso d'uso Collegamento dell'Account Google, l'ambito predefinito (email, profilo, openid) è sufficiente, non è necessario aggiungere ambiti sensibili. In genere, è buona prassi richiedere gli ambiti in modo incrementale, al momento del bisogno, anziché in anticipo. Scopri di più.

    Domini autorizzati:per proteggere te e i tuoi utenti, Google consente l'utilizzo dei domini autorizzati solo alle applicazioni che si autenticano tramite OAuth. I link delle tue applicazioni devono essere ospitati su domini autorizzati. Scopri di più.

    Link alla home page dell'applicazione: home page della tua applicazione. Deve essere ospitato su un dominio autorizzato.

    Link alle norme sulla privacy dell'applicazione:visualizzato nella schermata del consenso per il collegamento dell'Account Google. Deve essere ospitato su un dominio autorizzato.

    (Facoltativo) Link ai Termini di servizio dell'applicazione: deve essere ospitato in un dominio autorizzato.

    Figura 1. Schermata del consenso per il collegamento dell'Account Google per un'applicazione fittizia, Tunery

  4. Controlla "Stato verifica". Se la tua richiesta deve essere verificata, fai clic sul pulsante "Invia per la verifica" per inviarla. Per maggiori dettagli, consulta i requisiti per la verifica OAuth.

Implementa il server OAuth

Un'implementazione server OAuth 2.0 del flusso del codice di autorizzazione è composta da due endpoint, che il tuo servizio rende disponibili tramite HTTPS. Il primo endpoint è l'endpoint di autorizzazione, responsabile di trovare il consenso degli utenti all'accesso ai dati. L'endpoint di autorizzazione presenta che consente agli utenti che non hanno ancora effettuato l'accesso e che registrano il consenso l'accesso richiesto. Il secondo endpoint è quello di scambio di token, viene utilizzato per ottenere stringhe criptate, chiamate token, che autorizzano un utente a per accedere al tuo servizio.

Quando un'applicazione Google deve chiamare una delle API del tuo servizio, Google utilizza a questi endpoint per ottenere l'autorizzazione degli utenti per chiamare queste API per loro conto.

Una sessione del flusso del codice di autorizzazione OAuth 2.0 avviata da Google ha flusso seguente:

  1. Google apre il tuo endpoint di autorizzazione nel browser dell'utente. Se il flusso avviato su un dispositivo con solo comandi vocali per un'azione, Google trasferisce o l'esecuzione di queste query a un telefono.
  2. L'utente esegue l'accesso (se non l'ha già fatto) e concede a Google l'autorizzazione per accedere ai propri dati con la tua API, se non hanno già concesso l'autorizzazione.
  3. Il servizio crea un codice di autorizzazione e lo restituisce a Google. Da fare Devi quindi reindirizzare il browser dell'utente a Google con il codice di autorizzazione in allegato alla richiesta.
  4. Google invia il codice di autorizzazione al tuo endpoint di scambio di token, che consente di verificare l'autenticità del codice e restituisce un token di accesso e un token di aggiornamento. Il token di accesso è un token di breve durata che il tuo servizio accetta come credenziali per accedere alle API. Il token di aggiornamento è un token di token che Google può archiviare e utilizzare per acquisire nuovi token di accesso quando scadono.
  5. Dopo che l'utente ha completato il flusso di collegamento dell'account, ogni richiesta inviata da Google contiene un token di accesso.

Gestire le richieste di autorizzazione

Quando devi eseguire il collegamento dell'account utilizzando il codice di autorizzazione OAuth 2.0 flusso di autorizzazione, Google invia l'utente al tuo endpoint di autorizzazione con una richiesta include i seguenti parametri:

Parametri endpoint di autorizzazione
client_id L'ID client che hai assegnato a Google.
redirect_uri L'URL a cui invii la risposta a questa richiesta.
state Un valore di riferimento che viene restituito a Google invariato nelle URI di reindirizzamento.
scope Facoltativo:un insieme di stringhe di ambiti delimitati da spazi che specificano la i dati per i quali Google richiede l'autorizzazione.
response_type Il tipo di valore da restituire nella risposta. Per OAuth 2.0 flusso del codice di autorizzazione, il tipo di risposta è sempre code.
user_locale L'impostazione della lingua dell'Account Google RFC5646 , utilizzato per localizzare i contenuti nella lingua preferita dell'utente.

Ad esempio, se l'endpoint di autorizzazione è disponibile su https://myservice.example.com/auth, una richiesta potrebbe avere il seguente aspetto:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE

Per fare in modo che l'endpoint di autorizzazione gestisca le richieste di accesso, segui questi passaggi passaggi:

  1. Verifica che il client_id corrisponda all'ID client che hai assegnato a Google e che il valore redirect_uri corrisponda all'URL di reindirizzamento fornito da Google per il tuo servizio. Questi controlli sono importanti per evitare di concedere ad app client indesiderate o configurate in modo errato. Se supporti più Flussi OAuth 2.0, verifica inoltre che response_type sia code.
  2. Verifica se l'utente ha eseguito l'accesso al tuo servizio. Se l'utente non ha eseguito l'accesso, completare la procedura di accesso o di registrazione al servizio.
  3. Genera un codice di autorizzazione che Google dovrà utilizzare per accedere all'API. Il codice di autorizzazione può essere qualsiasi valore stringa, ma deve essere univoco rappresentano l'utente, il client a cui è destinato il token e la scadenza del codice e non deve essere indovibile. Di solito concedi l'autorizzazione che scadono dopo circa 10 minuti.
  4. Verifica che l'URL specificato dal parametro redirect_uri abbia il valore modulo seguente:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  5. Reindirizza il browser dell'utente all'URL specificato nel Parametro redirect_uri. Includi il codice di autorizzazione appena generato e il valore originale dello stato non modificato quando reindirizzi aggiungendo i parametri code e state. Di seguito è riportato un esempio dell'URL risultante:
    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING

Gestire le richieste di scambio di token

L'endpoint di scambio di token del tuo servizio è responsabile di due tipi di token piattaforme di scambio pubblicitario:

  • Scambia codici di autorizzazione con token di accesso e token di aggiornamento
  • Scambia i token di aggiornamento per i token di accesso

Le richieste di scambio di token includono i seguenti parametri:

Parametri endpoint scambio di token
client_id Una stringa che identifica l'origine della richiesta come Google. Questa stringa deve Essere registrato all'interno del sistema come identificatore univoco di Google.
client_secret Una stringa segreta che hai registrato con Google per il tuo servizio.
grant_type Il tipo di token che viene scambiato. È authorization_code o refresh_token.
code Quando grant_type=authorization_code, questo parametro è il valore codice ricevuto da Google tramite l'accesso o lo scambio di token endpoint.
redirect_uri Quando grant_type=authorization_code, questo parametro è il valore URL utilizzato nella richiesta di autorizzazione iniziale.
refresh_token Quando grant_type=refresh_token, questo parametro è il valore il token di aggiornamento che Google ha ricevuto dal tuo endpoint di scambio di token.
Scambia codici di autorizzazione con token di accesso e token di aggiornamento

Dopo che l'utente ha eseguito l'accesso e l'endpoint di autorizzazione restituisce una risposta di breve durata il codice di autorizzazione a Google, Google invia una richiesta allo scambio di token per scambiare il codice di autorizzazione con un token di accesso e un aggiornamento di accesso.

Per queste richieste, il valore di grant_type è authorization_code e il valore di code è il valore del codice di autorizzazione concesso in precedenza a Google. Di seguito è riportato un esempio di richiesta di scambio un codice di autorizzazione per un token di accesso e un token di aggiornamento:

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

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI

Per scambiare i codici di autorizzazione con un token di accesso e un token di aggiornamento, L'endpoint dello scambio di token risponde alle richieste POST eseguendo questo comando passaggi:

  1. Verifica che client_id identifichi l'origine della richiesta come autorizzata e che client_secret corrisponda al valore previsto.
  2. Verifica che il codice di autorizzazione sia valido e non scaduto e che il codice L'ID client specificato nella richiesta corrisponde all'ID client associato al codice di autorizzazione.
  3. Verifica che l'URL specificato dal parametro redirect_uri sia identico al valore utilizzato nella richiesta di autorizzazione iniziale.
  4. Se non riesci a verificare tutti i criteri precedenti, restituisci una richiesta HTTP 400 Errore di richiesta non valida con {"error": "invalid_grant"} come corpo.
  5. Altrimenti, utilizza l'ID utente del codice di autorizzazione per generare un aggiornamento e un token di accesso. Questi token possono essere qualsiasi valore stringa, ma Deve rappresentare in modo univoco l'utente e il client a cui è destinato il token. non deve essere indovinabile. Per i token di accesso, registra anche la scadenza il token, che in genere corrisponde a un'ora dopo l'emissione. I token di aggiornamento non hanno scadenza.
  6. Restituisci il seguente oggetto JSON nel corpo della risposta HTTPS:
    {
    "token_type": "Bearer",
    "access_token": "ACCESS_TOKEN",
    "refresh_token": "REFRESH_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    }

Google archivia il token di accesso e il token di aggiornamento per l'utente e i record la scadenza del token di accesso. Alla scadenza del token di accesso, Google utilizza il token di aggiornamento per riceverne uno nuovo dall'endpoint di scambio di token.

Scambia i token di aggiornamento per i token di accesso

Quando un token di accesso scade, Google invia una richiesta allo scambio di token per scambiare un token di aggiornamento con un nuovo token di accesso.

Per queste richieste, il valore di grant_type è refresh_token e il valore di refresh_token è il valore del token di aggiornamento concesso in precedenza in tutti i canali Google. Di seguito è riportato un esempio di richiesta per lo scambio di un token di aggiornamento per un token di accesso:

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

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

Per scambiare un token di aggiornamento con un token di accesso, l'endpoint di scambio dei token risponde alle richieste POST eseguendo questi passaggi:

  1. Verifica che client_id identifichi l'origine della richiesta come Google. che client_secret corrisponda al valore previsto.
  2. Verifica che il token di aggiornamento sia valido e che l'ID client specificato corrisponda all'ID client associato al token di aggiornamento.
  3. Se non riesci a verificare tutti i criteri precedenti, restituisci un errore HTTP 400 Errore di richiesta non valido con {"error": "invalid_grant"} come corpo.
  4. In caso contrario, utilizza l'ID utente del token di aggiornamento per generare un accesso di accesso. Questi token possono essere qualsiasi valore stringa, ma devono essere univoci rappresentano l'utente e il client a cui è destinato il token e non devono essere ipotizzabile. Per i token di accesso, registra anche la scadenza del token, in genere un'ora dopo l'emissione del token.
  5. Restituisci il seguente oggetto JSON nel corpo del file HTTPS risposta:
    {
    "token_type": "Portatore",
    "access_token": "ACCESS_TOKEN",
    "scadenza_in": SECONDS_TO_EXPIRATION
    }
di Gemini Advanced.
Handle userinfo requests

The userinfo endpoint is an OAuth 2.0 protected resource that return claims about the linked user. Implementing and hosting the userinfo endpoint is optional, except for the following use cases:

After the access token has been successfully retrieved from your token endpoint, Google sends a request to your userinfo endpoint to retrieve basic profile information about the linked user.

userinfo endpoint request headers
Authorization header The access token of type Bearer.

For example, if your userinfo endpoint is available at https://myservice.example.com/userinfo, a request might look like the following:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

For your userinfo endpoint to handle requests, do the following steps:

  1. Extract access token from the Authorization header and return information for the user associated with the access token.
  2. If the access token is invalid, return an HTTP 401 Unauthorized error with using the WWW-Authenticate Response Header. Below is an example of a userinfo error response:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    If a 401 Unauthorized, or any other unsuccessful error response is returned during the linking process, the error will be non-recoverable, the retrieved token will be discarded and the user will have to initiate the linking process again.
  3. If the access token is valid, return and HTTP 200 response with the following JSON object in the body of the HTTPS response:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    If your userinfo endpoint returns an HTTP 200 success response, the retrieved token and claims are registered against the user's Google account.

    userinfo endpoint response
    sub A unique ID that identifies the user in your system.
    email Email address of the user.
    given_name Optional: First name of the user.
    family_name Optional: Last name of the user.
    name Optional: Full name of the user.
    picture Optional: Profile picture of the user.

Convalidare l'implementazione

Puoi convalidare l'implementazione utilizzando lo strumento OAuth 2.0 Playground.

Nello strumento:

  1. Fai clic su Configurazione per aprire la finestra di configurazione di OAuth 2.0.
  2. Nel campo Flusso OAuth, seleziona Lato client.
  3. Nel campo Endpoint OAuth, seleziona Personalizzato.
  4. Specifica il tuo endpoint OAuth 2.0 e l'ID client che hai assegnato a Google nei campi corrispondenti.
  5. Nella sezione Passaggio 1, non selezionare alcun ambito Google. Lascia invece vuoto questo campo o digita un ambito valido per il tuo server (o una stringa arbitraria se non utilizzi gli ambiti OAuth). Al termine, fai clic su Autorizza API.
  6. Nelle sezioni Passaggio 2 e Passaggio 3, segui il flusso OAuth 2.0 e verifica che ogni passaggio funzioni come previsto.

Puoi convalidare l'implementazione utilizzando lo strumento Demo di collegamento dell'Account Google.

Nello strumento:

  1. Fai clic sul pulsante Accedi con Google.
  2. Scegli l'account che vuoi collegare.
  3. Inserisci l'ID servizio.
  4. (Facoltativo) Inserisci uno o più ambiti per i quali richiederai l'accesso.
  5. Fai clic su Avvia demo.
  6. Quando richiesto, conferma di poter acconsentire e rifiutare la richiesta di collegamento.
  7. Verifica di essere reindirizzato alla tua piattaforma.