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.

Nel flusso implicito, Google apre il tuo endpoint di autorizzazione nel browser dell'utente. Una volta eseguito 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 il consenso degli utenti all'accesso richiesto.

  • L'endpoint di scambio di token, 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 segue il flusso di collegamento dell'account.
    2. Scambia un token di aggiornamento a lungo termine con un token di accesso a breve termine. Questo scambio avviene quando Google ha bisogno di un nuovo token di accesso perché quello in suo possesso è scaduto.

Scegliere un flusso OAuth 2.0

Sebbene il flusso implicito sia più semplice da implementare, Google consiglia di non far scadere mai i token di accesso emessi dal flusso implicito. Questo accade 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 il flusso del codice di autorizzazione.

Istruzioni sul design

Questa sezione descrive i requisiti di progettazione e i consigli per la schermata utente ospitata per i flussi di collegamento OAuth. Dopo essere stata richiamata dall'app di Google, la tua piattaforma mostra all'utente una schermata di accesso alla pagina Google e all'account per il consenso per il collegamento. L'utente viene reindirizzato all'app di Google dopo aver dato il suo consenso al collegamento degli account.

Questa figura mostra i passaggi necessari a un utente per collegare il proprio Account Google
            al tuo sistema di autenticazione. Il primo screenshot mostra
            il collegamento avviato dall'utente dalla tua piattaforma. La seconda immagine mostra
            l'accesso dell'utente a Google, mentre la terza mostra il consenso e
            la conferma dell'utente per il collegamento del suo Account Google alla tua app. Lo
            screenshot finale mostra un account utente collegato correttamente
            nell'app Google.
Figura 1. Schermate di accesso dell'utente a Google e per il consenso per il collegamento dell'account.

Requisiti

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

Consigli

Ti consigliamo di procedere come segue:

  1. Mostra le Norme sulla privacy di Google. Includi un link alle Norme sulla privacy di Google nella schermata per il consenso.

  2. Dati da condividere. Usa un linguaggio chiaro e conciso per spiegare all'utente quali dati di sua proprietà richiedono Google e perché.

  3. Invito all'azione chiaro. Indica un invito all'azione chiaro nella schermata del consenso, ad esempio "Accetta e collega". Questo perché gli utenti devono capire quali dati devono condividere con Google per collegare i propri account.

  4. Possibilità di annullare. Fornisci agli utenti un modo per tornare indietro o annullare, se scelgono di non eseguire il collegamento.

  5. Cancella la procedura di accesso. Assicurati che gli utenti dispongano di un metodo chiaro per accedere al loro Account Google, ad esempio campi per nome utente e password o Accedi con Google.

  6. Possibilità di scollegare. Offrire un meccanismo per consentire agli utenti di scollegare, 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 modificare l'account utente. Suggerisci un metodo per consentire agli utenti di cambiare account. Questa opzione è particolarmente utile se gli utenti tendono ad avere più account.

    • Se un utente deve chiudere la schermata del consenso per cambiare account, invia un errore recuperabile a Google in modo che l'utente possa accedere all'account preferito con il collegamento OAuth e il flusso implicito.
  8. Includi il tuo logo. Mostra il logo della tua azienda nella schermata del consenso. Utilizza le linee guida di stile per posizionare il logo. Se vuoi mostrare anche il logo di Google, consulta 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.

Implementa il server OAuth

Per supportare il flusso OAuth 2.0 implicito, il servizio effettua un'autorizzazione endpoint disponibile tramite HTTPS. Questo endpoint è responsabile dell'autenticazione ottenere il consenso degli utenti per l'accesso ai dati. Endpoint di autorizzazione presenta una UI di accesso agli utenti che non hanno ancora effettuato l'accesso e registra acconsentire all'accesso richiesto.

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

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

  1. Google apre il tuo endpoint di autorizzazione nel browser dell'utente. La 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.
  2. Il servizio crea un token di accesso e lo restituisce a in tutti i canali Google. Per farlo, reindirizza il browser dell'utente a Google in modo da concedere l'accesso di accesso al token associato alla richiesta.
  3. Google chiama le API del tuo servizio e collega il token di accesso con per 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 protocollo OAuth 2.0 flusso implicito, Google invia l'utente al tuo endpoint di autorizzazione con una che 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.
response_type Il tipo di valore da restituire nella risposta. Per il token OAuth 2.0 implicito, il tipo di risposta è sempre token.
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&response_type=token&user_locale=LOCALE

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

  1. Verifica i valori client_id e redirect_uri per evitare di concedere l'accesso ad app client indesiderate o configurate in modo errato:

    • Verifica che il client_id corrisponda all'ID cliente che hai indicato assegnati a Google.
    • Verifica che l'URL specificato dal redirect_uri ha il seguente formato:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Verifica se l'utente ha eseguito l'accesso al tuo servizio. Se l'utente non ha firmato completa la procedura di accesso o registrazione al servizio.

  3. Genera un token di accesso che Google possa usare per accedere alla tua API. La il token di accesso può essere qualsiasi valore di stringa, ma deve rappresentare in modo univoco l'utente e il client a cui è destinato il token e non deve essere prevedibile.

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

    • access_token: il token di accesso che hai appena generato
    • token_type: la stringa bearer
    • state: il valore dello stato non modificato dell'originale richiesta

    Di seguito è riportato un esempio dell'URL risultante:

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

Il gestore del reindirizzamento OAuth 2.0 di Google riceve il token di accesso e conferma che il valore state sia rimasto invariato. Dopo che Google ha ottenuto di accesso al tuo servizio, Google lo collega alle chiamate successive alle API dei tuoi servizi.

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.