Collegamento dell'Account Google a OAuth

I collegamenti degli account vengono eseguiti utilizzando i flussi implicito e codice di autorizzazione OAuth 2.0 standard del settore.

Il tuo 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.

Creare il progetto

Per creare il progetto da utilizzare per il collegamento dell'account:

  1. Vai alla console dell'API di Google.
  2. Fai clic su Crea progetto.
  3. Inserisci un nome o accetta il suggerimento generato.
  4. Conferma o modifica i campi rimanenti.
  5. Fai clic su Crea.

Per visualizzare l'ID progetto:

  1. Vai alla console dell'API di Google.
  2. Trova il tuo progetto nella tabella della pagina di destinazione. L'ID progetto viene visualizzato nella ID colonna.

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

  1. Apri la pagina della schermata per il consenso OAuth della console API di Google.
  2. Se ti viene richiesto, seleziona il progetto che hai appena creato.
  3. Nella pagina "Schermata per il 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 riflettere con precisione l'applicazione ed essere coerente con il nome dell'applicazione visualizzato dagli utenti altrove. Il nome dell'applicazione verrà mostrato nella schermata per il consenso del 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 mostrato nella schermata per il consenso del collegamento dell'account e nelle impostazioni dell'account.

    Email di assistenza: gli utenti possono contattarti per domande sul loro consenso.

    Ambiti per le API Google: gli ambiti consentono alla tua 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, non devi aggiungere ambiti sensibili. In genere, è una best practice richiedere gli ambiti in modo incrementale, nel momento in cui è necessario l'accesso, anziché in anticipo. Scopri di più.

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

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

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

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

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

  4. Controlla lo "Stato della verifica". Se la tua applicazione richiede la verifica, fai clic sul pulsante "Invia per la verifica" per inviarla. Per i dettagli, consulta i requisiti di verifica OAuth.

Implementare il server OAuth

n

为了支持 OAuth 2.0 隐式流程,您的服务通过 HTTPS 提供授权端点。此端点负责身份验证和征得用户同意以获取数据访问权限。授权端点会向尚未登录的用户显示登录界面,并记录用户对所请求访问权限的同意情况。

当 Google 应用需要调用您服务的某个已获授权的 API 时,Google 会使用此端点来征得用户同意,以便代表用户调用这些 API。

由 Google 发起的典型 OAuth 2.0 隐式流程会话具有以下流程:

  1. Google 会在用户的浏览器中打开您的授权端点。用户登录(如果尚未登录),并授予 Google 权限以通过您的 API 访问其数据(如果尚未授予权限)。
  2. 您的服务会创建访问令牌并将其返回给 Google。为此,请将用户的浏览器重定向回 Google,并将访问令牌附加到请求中。
  3. Google 会调用您服务的 API,并在每个请求中附加访问令牌。您的服务会验证该访问令牌是否授予了 Google 访问相应 API 的授权,然后完成 API 调用。

处理授权请求

当 Google 应用需要通过 OAuth 2.0 隐式流程执行账号关联时,Google 会将用户发送到您的授权端点,并发送包含以下参数的请求:

授权端点参数
client_id 您分配给 Google 的客户 ID。
redirect_uri 您将对此请求的响应发送到的网址。
state 一种簿记值,在重定向 URI 中原封不动地传递回 Google。
response_type 要在响应中返回的值的类型。对于 OAuth 2.0 隐式流程,响应类型始终为 token
user_locale Google 账号语言设置(采用 RFC5646 格式),用于以用户的首选语言本地化您的内容。

例如,如果您的授权端点位于 https://myservice.example.com/auth,则请求可能如下所示:

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

如需让授权端点处理登录请求,请执行以下步骤:

  1. 验证 client_idredirect_uri 值,以防止向意外或配置错误的客户端应用授予访问权限:

    • 确认 client_id 与您分配给 Google 的客户端 ID 相一致。
    • 确认 redirect_uri 参数指定的网址具有以下格式:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. 检查用户是否已登录您的服务。如果用户未登录,请完成服务的登录或注册流程。

  3. 生成供 Google 用于访问您的 API 的访问令牌。访问令牌可以是任何字符串值,但必须唯一表示用户和令牌所针对的客户端,并且不得是可猜测的值。

  4. 发送 HTTP 响应,将用户的浏览器重定向到 redirect_uri 参数指定的网址。在网址片段中包含以下所有参数:

    • access_token:您刚刚生成的访问令牌
    • token_type:字符串 bearer
    • state:原始请求中的未修改状态值

    以下是生成的网址示例:

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

Google 的 OAuth 2.0 重定向处理程序会接收访问令牌,并确认 state 值未发生变化。在 Google 为您的服务获取访问令牌后,Google 会将该令牌附加到后续对您的服务 API 的调用中。

Gestire le richieste di informazioni utente

L'endpoint userinfo è una risorsa protetta da OAuth 2.0 che restituisce attestazioni sull'utente collegato. L'implementazione e l'hosting dell'endpoint userinfo sono facoltative, ad eccezione dei seguenti casi d'uso:

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

intestazioni delle richieste endpoint userinfo
Authorization header Il token di accesso di tipo Bearer.

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

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

Affinché l'endpoint userinfo possa gestire le richieste, segui questi passaggi:

  1. Estrai il token di accesso dall'intestazione Autorizzazione e restituisci le informazioni per l'utente associato al token di accesso.
  2. Se il token di accesso non è valido, restituisce un errore HTTP 401 Autorizzazione non autorizzata utilizzando l'intestazione della risposta WWW-Authenticate. Di seguito è riportato un esempio di risposta di errore userinfo:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    Se durante la procedura di collegamento viene restituito un errore 401 Autorizzazione o qualsiasi altra risposta di errore non riuscita durante la procedura di collegamento, l'errore non sarà recuperabile, il token recuperato verrà eliminato e l'utente dovrà avviare nuovamente la procedura di collegamento.
  3. Se il token di accesso è valido, restituisce e invia una risposta HTTP 200 con il seguente oggetto JSON nel corpo dell'HTTPS risposta:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    Se l'endpoint userinfo restituisce una risposta HTTP 200 riuscita, il token e le attestazioni recuperati vengono registrati in base all'Account Google dell'utente.

    risposta endpoint userinfo
    sub Un ID univoco che identifica l'utente nel sistema.
    email Indirizzo email dell'utente.
    given_name Facoltativo:nome dell'utente.
    family_name Facoltativo:il cognome dell'utente.
    name Facoltativo:nome completo dell'utente.
    picture (Facoltativo) Immagine del profilo dell'utente.

Convalidare l'implementazione

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

Nello strumento, segui questi passaggi:

  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 l'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 questo campo vuoto o digita un ambito valido per il tuo server (o una stringa arbitraria se non utilizzi gli ambiti OAuth). Quando hai finito, 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, segui questi passaggi:

  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 che puoi dare il consenso e rifiutare la richiesta di collegamento.
  7. Verifica di essere reindirizzato alla tua piattaforma.