Collegamento dell'Account Google a OAuth

I collegamenti degli account vengono eseguiti utilizzando il flusso del codice di autorizzazione OAuth 2.0, standard di settore.

OAuth 2.1 e PKCE per gli agenti

Per gli agenti AI senza stato e le pipeline multimodali, è consigliabile applicare OAuth 2.1.

  • PKCE (Proof Key for Code Exchange): deve essere utilizzato per proteggere il flusso del codice di autorizzazione, impedendo attacchi di intercettazione.
  • Nessun flusso implicito: il flusso implicito espone i token di accesso nell'URL, il che rappresenta un rischio per la sicurezza degli ambienti degli agenti.

Il tuo servizio deve supportare gli endpoint di autorizzazione e scambio di token conformi a OAuth 2.0/2.1.

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

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

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

Collegamento dell'account Google: flusso del codice di autorizzazione OAuth

Il seguente diagramma di sequenza descrive in dettaglio le interazioni tra l'utente, Google e gli endpoint del tuo servizio.

Utente App Google/ Browser Server Google Il tuo Auth Endpoint Il tuo token Endpoint 1. L'utente avvia il collegamento 2. Reindirizza all'endpoint di autenticazione (GET) client_id, redirect_uri, state, scope 3. Visualizza la schermata di accesso e consenso 4. L'utente esegue l'autenticazione e concede il consenso 5. Reindirizza di nuovo a Google (GET) code, state 6. Gestisci il reindirizzamento e passa il codice/lo stato 7. Scambio di token (POST) grant_type=authorization_code, code 8. Restituisci token (200 OK) access_token, refresh_token 9. Memorizza i token utente 10. Accedere alle risorse utente
Figura 1. La sequenza di eventi nel flusso del codice di autorizzazione OAuth 2.0 per il collegamento dell'Account Google.

Ruoli e responsabilità

La seguente tabella definisce i ruoli e le responsabilità degli attori nel flusso OAuth di collegamento dell'Account Google (GAL). Tieni presente che in GAL Google funge da client OAuth, mentre il tuo servizio funge da provider di identità/servizi.

Attore / componente Ruolo GAL Responsabilità
App / server Google Client OAuth Avvia il flusso, riceve il codice di autorizzazione, lo scambia con token e li archivia in modo sicuro per accedere alle API del tuo servizio.
Il tuo endpoint di autorizzazione Server di autorizzazione Autentica gli utenti e ottiene il loro consenso a condividere l'accesso ai loro dati con Google.
Endpoint di scambio token Server di autorizzazione Convalida i codici di autorizzazione e i token di aggiornamento ed emette token di accesso al server Google.
URI di reindirizzamento Google Endpoint di callback Riceve il reindirizzamento dell'utente dal tuo servizio di autorizzazione con i valori code e state.

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

  1. Google apre l'endpoint di autorizzazione nel browser dell'utente. Se il flusso è iniziato su un dispositivo solo vocale per un'azione, Google trasferisce l'esecuzione a uno smartphone.
  2. L'utente esegue l'accesso, se non l'ha già fatto, e concede a Google l'autorizzazione ad accedere ai propri dati con la tua API, se non l'ha già concessa.
  3. Il tuo servizio crea un codice di autorizzazione e lo restituisce a Google. Per farlo, reindirizza il browser dell'utente a Google con il codice di autorizzazione allegato alla richiesta.
  4. Google invia il codice di autorizzazione all'endpoint di scambio dei token, che verifica 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 a lunga durata che Google può archiviare e utilizzare per acquisire nuovi token di accesso quando scadono.
  5. Una volta completato il flusso di collegamento dell'account, ogni richiesta successiva inviata da Google contiene un token di accesso.

Implementation Recipe

Segui questi passaggi per implementare il flusso del codice di autorizzazione.

Passaggio 1: gestisci le richieste di autorizzazione

Quando Google avvia il collegamento dell'account, reindirizza l'utente all'endpoint di autorizzazione. Per i contratti di protocollo dettagliati e i requisiti dei parametri, consulta l'endpoint di autorizzazione.

Per gestire la richiesta, esegui le seguenti azioni:

  1. Convalida la richiesta:

    • Verifica che client_id corrisponda all'ID client assegnato a Google.
    • Verifica che redirect_uri corrisponda all'URL di reindirizzamento di Google previsto: none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
    • Verifica che response_type sia code.
  2. Autentica l'utente:

    • Controlla se l'utente ha eseguito l'accesso al tuo servizio.
    • Se l'utente non ha eseguito l'accesso, invitalo a completare la procedura di accesso o registrazione.
  3. Genera codice di autorizzazione:

    • Crea un codice di autorizzazione univoco e non intuibile associato all'utente e al client.
    • Imposta la scadenza del codice dopo circa 10 minuti.
  4. Reindirizza di nuovo a Google:

    • Reindirizza il browser all'URL fornito in redirect_uri.
    • Aggiungi i seguenti parametri di query:
      • code: il codice di autorizzazione che hai generato.
      • state: il valore dello stato non modificato ricevuto da Google.

Passaggio 2: gestisci le richieste di scambio di token

L'endpoint di scambio di token elabora due tipi di richieste: lo scambio di codici con token e l'aggiornamento dei token di accesso scaduti. Per i contratti di protocollo dettagliati e i requisiti dei parametri, consulta Endpoint Token Exchange.

A. Scambiare codici di autorizzazione con token

Quando Google riceve il codice di autorizzazione, chiama l'endpoint di scambio dei token (POST) per recuperare i token.

  1. Convalida la richiesta:

    • Verifica client_id e client_secret.
    • Verifica che il codice di autorizzazione sia valido e non scaduto.
    • Verifica che redirect_uri corrisponda al valore utilizzato nel passaggio 1.
    • Se la convalida non va a buon fine, restituisci un errore HTTP 400 Bad Request con {"error": "invalid_grant"}.
  2. Token problema:

    • Genera un refresh_token di lunga durata e un access_token di breve durata (in genere 1 ora).
    • Restituisci un codice HTTP 200 OK con la risposta standard del token JSON.

B. Aggiornare i token di accesso

Quando il token di accesso scade, Google ne richiede uno nuovo utilizzando il token di aggiornamento.

  1. Convalida la richiesta:

    • Verifica client_id, client_secret e refresh_token.
    • Se la convalida non va a buon fine, restituisci un errore HTTP 400 Bad Request con {"error": "invalid_grant"}.
  2. Emetti un nuovo token di accesso:

    • Genera un nuovo access_token temporaneo.
    • Restituisci un codice HTTP 200 OK con la risposta del token JSON (inclusa facoltativamente una nuova risposta del token di aggiornamento).
处理 userinfo 请求

userinfo 端点是受 OAuth 2.0 保护的资源,会返回关联用户的声明。实现和托管 userinfo 端点是可选的,但以下用例除外:

从您的令牌端点成功检索到访问令牌后,Google 会向您的 userinfo 端点发送请求,以检索关联用户的基本个人资料信息。

userinfo 端点请求标头
Authorization header Bearer 类型的访问令牌。

例如,如果您的 userinfo 端点可通过 https://myservice.example.com/userinfo 时,请求可能如下所示:

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

为了让 userinfo 端点能够处理请求,请执行以下步骤:

  1. 从 Authorization 标头中提取访问令牌,并返回与访问令牌相关联的用户的信息。
  2. 如果访问令牌无效,则使用 WWW-Authenticate 响应标头返回 HTTP 401 Unauthorized 错误。下面是一个 userinfo 错误响应示例:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    如果在关联过程中返回 401 未经授权错误或任何其他失败的错误响应,该错误将无法恢复,检索到的令牌将被舍弃,并且用户必须重新开始关联流程。
  3. 如果访问令牌有效,则返回 HTTPS 正文中包含以下 JSON 对象的 HTTP 200 响应 回答:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    如果您的 userinfo 端点返回 HTTP 200 成功响应,则系统会针对用户的 Google 账号注册检索到的令牌和声明。

    userinfo 端点响应
    sub 系统中用于识别用户的唯一 ID。
    email 用户的电子邮件地址。
    given_name 可选:用户的名字。
    family_name 可选:用户的姓氏。
    name 可选:用户的全名。
    picture 可选:用户的个人资料照片。

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.