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.

Nel flusso implicit, Google apre il tuo endpoint di autorizzazione nel browser dell'utente. Dopo l'accesso, restituisci un token di accesso di lunga durata a Google. Questo token di accesso è ora incluso in ogni richiesta inviata da Google.

Nel flusso del codice di autorizzazione sono necessari due endpoint:

  • L'endpoint di autorizzazione, che mostra l'interfaccia utente di accesso agli utenti che non hanno ancora eseguito l'accesso. L'endpoint di autorizzazione crea anche un codice di autorizzazione di breve durata per registrare gli utenti' dare il consenso all'accesso richiesto.

  • L'endpoint di token Exchange, responsabile di due tipi di scambi:

    1. Scambia un codice di autorizzazione con un token di aggiornamento di lunga durata e un token di accesso di breve durata. Questo scambio avviene quando l'utente effettua il flusso di collegamento dell'account.
    2. Scambia un token di aggiornamento di lunga durata con un token di accesso di breve durata. Questo scambio viene eseguito quando Google ha bisogno di un nuovo token di accesso perché è scaduto.

Scegli un flusso OAuth 2.0

Anche se il flusso implicito è più semplice da implementare, Google consiglia che i token di accesso emessi dal flusso implicito non scadano. Questo perché l'utente è costretto a collegare di nuovo il proprio account dopo la scadenza di un token con il flusso implicito. Se hai bisogno della scadenza del token per motivi di sicurezza, ti consigliamo vivamente di utilizzare invece il flusso del codice di autorizzazione.

Istruzioni sul design

In questa sezione vengono descritti i requisiti e i consigli di progettazione per la schermata utente ospitata per i flussi di collegamento OAuth. Dopo che l'app è stata chiamata dall'app Google, la tua piattaforma mostra all'utente una schermata di accesso alla pagina Google e un collegamento per il consenso. L'utente viene reindirizzato all'app di Google dopo aver dato il suo consenso al collegamento degli account.

Questa figura mostra i passaggi per consentire a un utente di collegare il proprio Account Google al sistema di autenticazione. Il primo screenshot mostra un collegamento avviato dall'utente dalla tua piattaforma. La seconda mostra l'accesso dell'utente a Google, mentre la terza mostra il consenso e la conferma dell'utente per il collegamento dell'Account Google all'app. Lo screenshot finale mostra un account utente collegato nell'app Google.
Figura 1. Account utente che collega l'utente a Google e alle schermate per il consenso.

Requisiti

  1. Devi comunicare che l'account dell'utente sarà collegato a Google, non a un prodotto Google specifico come Google Home o Assistente Google.

Suggerimenti

Ti consigliamo di procedere come segue:

  1. Visualizza le Norme sulla privacy di Google. Includi un link alle Norme sulla privacy di Google nella schermata di consenso.

  2. Dati da condividere. Utilizza un linguaggio chiaro e conciso per spiegare all'utente quali dati sono richiesti da Google e perché.

  3. Invito all'azione chiaro. Specifica un chiaro invito all'azione nella schermata di consenso, ad esempio "Accetta e collega". Il motivo è che gli utenti devono capire quali dati devono condividere con Google per collegare i loro account.

  4. Possibilità di annullare. Specifica un modo per gli utenti di tornare indietro o annullare, se scelgono di non collegare.

  5. Cancella la procedura di accesso. Assicurati che gli utenti abbiano un metodo chiaro per accedere al proprio Account Google, ad esempio i campi per il nome utente e la password o la funzionalità Accedi con Google.

  6. Possibilità di scollegamento. Offrire agli utenti un meccanismo per scollegarli, ad esempio un URL alle impostazioni del loro account sulla tua piattaforma. In alternativa, puoi includere un link all'Account Google in cui gli utenti possono gestire il proprio account collegato.

  7. Possibilità di cambiare l'account utente. Suggerisci un metodo che consenta agli utenti di cambiare account. Ciò è particolarmente utile se gli utenti tendono ad avere più account.

    • Se un utente deve chiudere la schermata di consenso per cambiare account, invia a Google un errore irreversibile per poter accedere all'account desiderato con il collegamento OAuth e il flusso implicito.
  8. Includi il tuo logo. Mostrare il logo dell'azienda nella schermata per il consenso. Segui le linee guida relative allo stile per posizionare il logo. Se vuoi mostrare anche il logo di Google, consulta la sezione Loghi e marchi.

Create the project

To create your project to use account linking:

  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 .

The Google Account Linking process includes a consent screen which tells users the application requesting access to their data, what kind of data they are asking for and the terms that apply. You will need to configure your OAuth consent screen before generating a Google API client ID.

  1. Open the OAuth consent screen page of the Google APIs console.
  2. If prompted, select the project you just created.
  3. On the "OAuth consent screen" page, fill out the form and click the “Save” button.

    Application name: The name of the application asking for consent. The name should accurately reflect your application and be consistent with the application name users see elsewhere. The application name will be shown on the Account Linking consent screen.

    Application logo: An image on the consent screen that will help users recognize your app. The logo is shown on Account linking consent screen and on account settings

    Support email: For users to contact you with questions about their consent.

    Scopes for Google APIs: Scopes allow your application to access your user's private Google data. For the Google Account Linking use case, default scope (email, profile, openid) is sufficient, you don’t need to add any sensitive scopes. It is generally a best practice to request scopes incrementally, at the time access is required, rather than up front. Learn more.

    Authorized domains: To protect you and your users, Google only allows applications that authenticate using OAuth to use Authorized Domains. Your applications' links must be hosted on Authorized Domains. Learn more.

    Application Homepage link: Home page for your application. Must be hosted on an Authorized Domain.

    Application Privacy Policy link: Shown on Google Account Linking consent screen. Must be hosted on an Authorized Domain.

    Application Terms of Service link (Optional): Must be hosted on an Authorized Domain.

    Figure 1. Google Account Linking Consent Screen for a fictitious Application, Tunery

  4. Check "Verification Status", if your application needs verification then click the "Submit For Verification" button to submit your application for verification. Refer to OAuth verification requirements for details.

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.

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

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