Collegamento dell'Account Google con OAuth

Gli account sono collegati utilizzando i flussi OAuth 2.0 implicit e codice di autorizzazione standard del settore. Il servizio deve supportare gli endpoint di autorizzazione e di 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 progetto 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 .

Il processo 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. Prima di generare un ID client API di Google, devi configurare la schermata per il consenso OAuth.

  1. Apri la pagina Schermata consenso OAuth della console API di 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 applicazione: il nome dell'applicazione che richiede il consenso. Il nome deve riflettere 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 per il consenso al collegamento dell'account.

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

    Email dell'assistenza: consente agli utenti di contattarti se hanno domande sul loro consenso.

    Ambiti per le API di Google:gli ambiti consentono all'applicazione di accedere ai dati privati di Google dell'utente. Per il caso d'uso del collegamento dell'Account Google, l'ambito predefinito (email, profilo, openid) è sufficiente e non è necessario aggiungere ambiti sensibili. Una best practice consiste generalmente nel richiedere gli ambiti in modo incrementale, nel momento in cui è richiesto l'accesso, 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:mostrato nella schermata per il consenso al collegamento dell'Account Google. Deve essere ospitato su un dominio autorizzato.

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

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

  4. Seleziona lo "Stato di verifica" se la tua richiesta richiede una verifica, quindi fai clic sul pulsante "Invia per la verifica" per inviarla per la verifica. Per maggiori dettagli, consulta i requisiti di verifica OAuth.

Implementare il server OAuth

Per supportare il flusso implicita OAuth 2.0, il servizio rende un punto finale di autorizzazione a disposizione da HTTPS. Questo endpoint è responsabile dell'autenticazione e dell'ottenimento del consenso degli utenti per l'accesso ai dati. L'endpoint di autorizzazione presenta un'interfaccia utente di accesso agli utenti che non hanno già effettuato l'accesso e registra il consenso all'accesso richiesto.

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

Una tipica sessione di flusso implicito OAuth 2.0 avviata da Google ha il seguente flusso:

  1. Google apre il tuo endpoint di autorizzazione nel browser dell'utente. L'utente accede, se non ha già effettuato l'accesso, e concede a Google l'autorizzazione ad accedere ai propri dati con la tua API, se non ha già concesso l'autorizzazione.
  2. Il vostro servizio crea un token di accesso e ritorna a Google. Per fare ciò, reindirizza il browser dell'utente a Google con il token di accesso allegato alla richiesta.
  3. Google chiama le API del tuo servizio e allega il token di accesso a ogni richiesta. Il tuo servizio verifica che il token di accesso conceda a Google l'autorizzazione ad accedere all'API e quindi completa la chiamata API.

Gestire le richieste di autorizzazione

Quando un'applicazione Google deve eseguire il collegamento dell'account tramite un flusso implicito OAuth 2.0, Google invia l'utente al tuo endpoint di autorizzazione con una richiesta che include i seguenti parametri:

Parametri dell'endpoint di autorizzazione
client_id L'ID cliente che hai assegnato a Google.
redirect_uri L'URL a cui invii la risposta a questa richiesta.
state Un valore contabile che viene restituito a Google invariato nell'URI di reindirizzamento.
response_type Il tipo di valore da restituire nella risposta. Per il flusso implicita OAuth 2.0, il tipo di risposta è sempre token .
user_locale L'impostazione della lingua del tuo account Google in RFC5646 formato utilizzato per localizzare i contenuti in lingua preferita dell'utente.

Ad esempio, se il punto finale di autorizzazione è disponibile presso https://myservice.example.com/auth , una richiesta potrebbe essere simile al seguente:

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

Affinché il tuo endpoint di autorizzazione possa gestire le richieste di accesso, procedi come segue:

  1. Verificare i client_id e redirect_uri valori per impedire concedere l'accesso ai applicazioni client non intenzionali o mal configurati:

    • Verificare che il client_id corrisponde all'ID cliente assegnato a Google.
    • Verificare che l'URL specificato dal redirect_uri parametro ha il seguente modulo:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Controlla se l'utente ha effettuato l'accesso al tuo servizio. Se l'utente non ha effettuato l'accesso, completa il flusso di accesso o registrazione al servizio.

  3. Genera un token di accesso che Google possa utilizzare per accedere alla tua API. Il token di accesso può essere un qualsiasi valore di stringa, ma deve rappresentare in modo univoco l'utente e il client per il quale il token è e non deve essere indovinabile.

  4. Invia una risposta HTTP che reindirizza il browser dell'utente all'URL specificato dal redirect_uri parametro. Includi tutti i seguenti parametri nel frammento di URL:

    • access_token : Il token di accesso che avete appena generato
    • token_type : La stringa bearer
    • state : Il valore stato non modificato dalla richiesta originale

    Quanto segue è un esempio di URL risultante:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

OAuth 2.0 gestore di reindirizzamento di Google riceve il token di accesso e conferma che lo state valore non è cambiato. Dopo che Google ha ottenuto un token di accesso per il tuo servizio, Google allega il token alle chiamate successive alle API del tuo servizio.

Gestire le richieste di informazioni utente

L' endpoint userinfo è una risorsa protetta OAuth 2.0 che le affermazioni di ritorno circa l'utente collegato. L'implementazione e l'hosting dell'endpoint userinfo è facoltativa, ad eccezione dei seguenti casi d'uso:

Dopo che il token di accesso è stato recuperato correttamente dal tuo endpoint token, Google invia una richiesta al tuo endpoint userinfo per recuperare le informazioni di base del profilo dell'utente collegato.

intestazioni di richiesta dell'endpoint userinfo
Authorization header Il token di accesso di tipo Bearer.

Ad esempio, se l'userinfo endpoint è disponibile presso https://myservice.example.com/userinfo , una richiesta potrebbe essere simile al seguente:

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

Affinché il tuo endpoint userinfo possa gestire le richieste, procedi come segue:

  1. Estrai il token di accesso dall'intestazione Authorization e restituisci le informazioni per l'utente associato al token di accesso.
  2. Se il token di accesso non è valido, restituire un errore HTTP 401 non autorizzato con l'utilizzo del WWW-Authenticate intestazione di risposta. Di seguito è riportato un esempio di una risposta di errore UserInfo:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    Se un 401 non autorizzato, o qualsiasi altro errore di risposta senza successo viene restituito durante il processo di collegamento, l'errore sarà non recuperabile, il token recuperate verrà scartato e l'utente avrà per avviare nuovamente il processo di collegamento.
  3. Se il token di accesso è valido, ritorno e HTTP 200 risposta con il seguente oggetto JSON nel corpo della risposta HTTPS:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    
    Se l'userinfo endpoint restituisce una risposta HTTP 200 successo, il recuperato token e reclami sono registrati contro Google dell'utente account.

    risposta dell'endpoint delle informazioni sull'utente
    sub Un ID univoco che identifica l'utente nel tuo sistema.
    email Indirizzo e-mail dell'utente.
    given_name Opzionale: Nome dell'utente.
    family_name Opzionale: Ultimo nome dell'utente.
    name Opzionale: nome completo dell'utente.
    picture Foto del profilo di utente: opzionale.

Convalidare l'implementazione

È possibile convalidare l'implementazione utilizzando il parco giochi OAuth 2.0 strumento.

Nello strumento, eseguire le seguenti operazioni:

  1. Fare clic su Configurazione per aprire la finestra di configurazione OAuth 2.0.
  2. Nel campo di flusso OAuth, selezionare sul lato client.
  3. Nel campo OAuth endpoint, selezionare 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 tutti gli ambiti di 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). Quando hai finito, clicca API Autorizza.
  6. Nelle sezioni Fase 2 e Fase 3, passare attraverso il flusso OAuth 2.0 e verificare che ogni passo funziona come previsto.

È possibile convalidare l'implementazione utilizzando l' account Google Linking Demo strumento.

Nello strumento, eseguire le seguenti operazioni:

  1. Fare clic sul segno-in con pulsante di Google.
  2. Scegli l'account che desideri collegare.
  3. Inserisci l'ID del servizio.
  4. Facoltativamente, inserisci uno o più ambiti per i quali richiedere l'accesso.
  5. Fare clic su Start Demo.
  6. Quando richiesto, conferma che puoi acconsentire e negare la richiesta di collegamento.
  7. Conferma di essere reindirizzato alla tua piattaforma.