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.

隐式流程中,Google 会在用户的浏览器中打开您的授权端点。成功登录后,您将向 Google 返回一个长期访问令牌。现在,此访问令牌会包含在 Google 发送的每个请求中。

授权代码流程中,您需要两个端点:

  • 授权端点,用于向尚未登录的用户显示登录界面。授权端点还会创建一个短期授权代码,以记录用户对所请求访问权限的同意情况。

  • 令牌交换端点,负责两种类型的交换:

    1. 使用授权代码换取长期有效的刷新令牌和短期有效的访问令牌。当用户完成账号关联流程时,就会发生此交换。
    2. 将长期有效的刷新令牌换成短期有效的访问令牌。当 Google 需要新的访问令牌(因为现有访问令牌已过期)时,就会发生这种交换。

选择 OAuth 2.0 流程

虽然隐式流程更易于实现,但 Google 建议通过隐式流程签发的访问令牌永不过期。这是因为,在隐式流程中,令牌过期后,系统会强制用户重新关联其账号。如果您出于安全考虑需要令牌过期,我们强烈建议您改用授权码流程。

设计准则

本部分介绍了您为 OAuth 关联流程托管的用户屏幕的设计要求和建议。在 Google 应用调用该 API 后,您的平台会向用户显示登录 Google 页面和账号关联意见征求界面。同意关联账号后,系统会将用户重定向回 Google 的应用。

此图展示了用户将其 Google 账号与您的身份验证系统相关联的步骤。第一个屏幕截图显示了用户从您的平台发起的关联。第二张图片显示用户登录 Google,第三张图片显示用户同意并确认将其 Google 账号与您的应用相关联。最后一张屏幕截图显示 Google 应用中成功关联的用户账号。
图 1.账号关联用户登录 Google 和同意屏幕。

要求

  1. 您必须说明用户的账号将与 Google 相关联,而非 Google Home 或 Google 助理等特定 Google 产品相关联。

建议

建议您执行以下操作:

  1. 显示 Google 的隐私权政策。在同意屏幕上添加指向 Google 隐私权政策的链接。

  2. 要共享的数据。使用清晰简洁的语言告知用户 Google 需要哪些用户数据以及原因。

  3. 添加醒目的号召性用语。在用户同意页面上提供明确的号召性用语,例如“同意并关联”。这是因为用户需要了解他们需要与 Google 分享哪些数据才能关联账号。

  4. 可以取消。为用户提供返回或取消链接的途径,如果用户选择不进行关联。

  5. 明确的登录流程。确保用户有明确的 Google 账号登录方法,例如用户名和密码字段或使用 Google 账号登录

  6. 能够解除关联。提供一种可让用户解除关联的机制,例如指向您平台上账号设置的网址。或者,您也可以添加指向 Google 账号的链接,以便用户管理其关联的账号。

  7. 能够更改用户账号。建议用户切换账号的方法。如果用户通常拥有多个账号,这种做法尤为有益。

    • 如果用户必须关闭意见征求界面才能切换账号,请向 Google 发送可恢复的错误,以便用户可以使用 OAuth 关联隐式流程登录所需的账号。
  8. 添加您的徽标。在意见征求页面上显示您的公司徽标。 按照您的样式准则放置徽标。如果您还想显示 Google 的徽标,请参阅徽标和商标

Crea il progetto

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

  1. Fai clic su Crea progetto.
  2. Inserisci un nome o accetta il suggerimento generato.
  3. Conferma o modifica i campi rimanenti.
  4. Fai clic su Crea.

Per visualizzare l'ID progetto:

  1. Trova il tuo progetto nella tabella della pagina di destinazione. L'ID progetto viene visualizzato nella colonna ID.

La procedura di collegamento dell'Account Google include una schermata di 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 per il consenso OAuth della console Google APIs.
  2. Se richiesto, seleziona il progetto appena creato.
  3. Nella pagina "Schermata 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 accuratamente la tua applicazione ed essere coerente con il nome dell'applicazione visualizzato dagli utenti altrove. Il nome dell'applicazione verrà mostrato nella schermata per il consenso al collegamento degli 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 al collegamento dell'account e nelle impostazioni dell'account.

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

    Ambiti per le API di Google:gli ambiti consentono alla tua applicazione di accedere ai dati privati di Google dell'utente. Per lo scenario di utilizzo del collegamento dell'Account Google, l'ambito predefinito (email, profilo, openid) è sufficiente, non è necessario 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 solo alle 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 ospitato su un dominio autorizzato.

    Link alle norme sulla privacy dell'applicazione:visualizzato nella schermata per il consenso al collegamento dell'Account Google. Deve essere ospitato su un dominio autorizzato.

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

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

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

Implementa il server OAuth

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

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

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

  1. Google apre il tuo endpoint di autorizzazione nel browser dell'utente. Se il flusso avviato su un dispositivo con solo comandi vocali per un'azione, Google trasferisce o l'esecuzione di queste query a un telefono.
  2. 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.
  3. Il servizio crea un codice di autorizzazione e lo restituisce a Google. Da fare Devi quindi reindirizzare il browser dell'utente a Google con il codice di autorizzazione in allegato alla richiesta.
  4. Google invia il codice di autorizzazione al tuo endpoint di scambio di token, che consente di verificare 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 di token che Google può archiviare e utilizzare per acquisire nuovi token di accesso quando scadono.
  5. Dopo che l'utente ha completato il flusso di collegamento dell'account, ogni richiesta inviata da Google contiene un token di accesso.

Gestire le richieste di autorizzazione

Quando devi eseguire il collegamento dell'account utilizzando il codice di autorizzazione OAuth 2.0 flusso di autorizzazione, Google invia l'utente al tuo endpoint di autorizzazione con una richiesta 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.
scope Facoltativo:un insieme di stringhe di ambiti delimitati da spazi che specificano la i dati per i quali Google richiede l'autorizzazione.
response_type Il tipo di valore da restituire nella risposta. Per OAuth 2.0 flusso del codice di autorizzazione, il tipo di risposta è sempre code.
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&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE

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

  1. Verifica che il client_id corrisponda all'ID client che hai assegnato a Google e che il valore redirect_uri corrisponda all'URL di reindirizzamento fornito da Google per il tuo servizio. Questi controlli sono importanti per evitare di concedere ad app client indesiderate o configurate in modo errato. Se supporti più Flussi OAuth 2.0, verifica inoltre che response_type sia code.
  2. Verifica se l'utente ha eseguito l'accesso al tuo servizio. Se l'utente non ha eseguito l'accesso, completare la procedura di accesso o di registrazione al servizio.
  3. Genera un codice di autorizzazione che Google dovrà utilizzare per accedere all'API. Il codice di autorizzazione può essere qualsiasi valore stringa, ma deve essere univoco rappresentano l'utente, il client a cui è destinato il token e la scadenza del codice e non deve essere indovibile. Di solito concedi l'autorizzazione che scadono dopo circa 10 minuti.
  4. Verifica che l'URL specificato dal parametro redirect_uri abbia il valore modulo seguente:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  5. Reindirizza il browser dell'utente all'URL specificato nel Parametro redirect_uri. Includi il codice di autorizzazione appena generato e il valore originale dello stato non modificato quando reindirizzi aggiungendo i parametri code e state. Di seguito è riportato un esempio dell'URL risultante:
    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING

Gestire le richieste di scambio di token

L'endpoint di scambio di token del tuo servizio è responsabile di due tipi di token piattaforme di scambio pubblicitario:

  • Scambia codici di autorizzazione con token di accesso e token di aggiornamento
  • Scambia i token di aggiornamento per i token di accesso

Le richieste di scambio di token includono i seguenti parametri:

Parametri endpoint scambio di token
client_id Una stringa che identifica l'origine della richiesta come Google. Questa stringa deve Essere registrato all'interno del sistema come identificatore univoco di Google.
client_secret Una stringa segreta che hai registrato con Google per il tuo servizio.
grant_type Il tipo di token che viene scambiato. È authorization_code o refresh_token.
code Quando grant_type=authorization_code, questo parametro è il valore codice ricevuto da Google tramite l'accesso o lo scambio di token endpoint.
redirect_uri Quando grant_type=authorization_code, questo parametro è il valore URL utilizzato nella richiesta di autorizzazione iniziale.
refresh_token Quando grant_type=refresh_token, questo parametro è il valore il token di aggiornamento che Google ha ricevuto dal tuo endpoint di scambio di token.
Scambia codici di autorizzazione con token di accesso e token di aggiornamento

Dopo che l'utente ha eseguito l'accesso e l'endpoint di autorizzazione restituisce una risposta di breve durata il codice di autorizzazione a Google, Google invia una richiesta allo scambio di token per scambiare il codice di autorizzazione con un token di accesso e un aggiornamento di accesso.

Per queste richieste, il valore di grant_type è authorization_code e il valore di code è il valore del codice di autorizzazione concesso in precedenza a Google. Di seguito è riportato un esempio di richiesta di scambio un codice di autorizzazione per un token di accesso e un token di aggiornamento:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI

Per scambiare i codici di autorizzazione con un token di accesso e un token di aggiornamento, L'endpoint dello scambio di token risponde alle richieste POST eseguendo questo comando passaggi:

  1. Verifica che client_id identifichi l'origine della richiesta come autorizzata e che client_secret corrisponda al valore previsto.
  2. Verifica che il codice di autorizzazione sia valido e non scaduto e che il codice L'ID client specificato nella richiesta corrisponde all'ID client associato al codice di autorizzazione.
  3. Verifica che l'URL specificato dal parametro redirect_uri sia identico al valore utilizzato nella richiesta di autorizzazione iniziale.
  4. Se non riesci a verificare tutti i criteri precedenti, restituisci una richiesta HTTP 400 Errore di richiesta non valida con {"error": "invalid_grant"} come corpo.
  5. Altrimenti, utilizza l'ID utente del codice di autorizzazione per generare un aggiornamento e un token di accesso. Questi token possono essere qualsiasi valore stringa, ma Deve rappresentare in modo univoco l'utente e il client a cui è destinato il token. non deve essere indovinabile. Per i token di accesso, registra anche la scadenza il token, che in genere corrisponde a un'ora dopo l'emissione. I token di aggiornamento non hanno scadenza.
  6. Restituisci il seguente oggetto JSON nel corpo della risposta HTTPS:
    {
    "token_type": "Bearer",
    "access_token": "ACCESS_TOKEN",
    "refresh_token": "REFRESH_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    }

Google archivia il token di accesso e il token di aggiornamento per l'utente e i record la scadenza del token di accesso. Alla scadenza del token di accesso, Google utilizza il token di aggiornamento per riceverne uno nuovo dall'endpoint di scambio di token.

Scambia i token di aggiornamento per i token di accesso

Quando un token di accesso scade, Google invia una richiesta allo scambio di token per scambiare un token di aggiornamento con un nuovo token di accesso.

Per queste richieste, il valore di grant_type è refresh_token e il valore di refresh_token è il valore del token di aggiornamento concesso in precedenza in tutti i canali Google. Di seguito è riportato un esempio di richiesta per lo scambio di un token di aggiornamento per un token di accesso:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

Per scambiare un token di aggiornamento con un token di accesso, l'endpoint di scambio dei token risponde alle richieste POST eseguendo questi passaggi:

  1. Verifica che client_id identifichi l'origine della richiesta come Google. che client_secret corrisponda al valore previsto.
  2. Verifica che il token di aggiornamento sia valido e che l'ID client specificato corrisponda all'ID client associato al token di aggiornamento.
  3. Se non riesci a verificare tutti i criteri precedenti, restituisci un errore HTTP 400 Errore di richiesta non valido con {"error": "invalid_grant"} come corpo.
  4. In caso contrario, utilizza l'ID utente del token di aggiornamento per generare un accesso di accesso. Questi token possono essere qualsiasi valore stringa, ma devono essere univoci rappresentano l'utente e il client a cui è destinato il token e non devono essere ipotizzabile. Per i token di accesso, registra anche la scadenza del token, in genere un'ora dopo l'emissione del token.
  5. Restituisci il seguente oggetto JSON nel corpo del file HTTPS risposta:
    {
    "token_type": "Portatore",
    "access_token": "ACCESS_TOKEN",
    "scadenza_in": SECONDS_TO_EXPIRATION
    }
di Gemini Advanced.
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:

  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.