Il tipo di collegamento "semplificato" di Accedi con Google basato su OAuth aggiunge Accedi con Google in aggiunta al collegamento dell'account basato su OAuth. In questo modo, gli utenti Google possono collegare facilmente i propri account tramite comandi vocali, mentre gli utenti che si sono registrati al tuo servizio con un'identità non Google possono collegare i propri account.
Questo tipo di collegamento inizia con Accedi con Google, che ti consente di verificare se le informazioni del profilo Google dell'utente esistono nel tuo sistema. Se le informazioni dell'utente non vengono trovate nel tuo sistema, inizia un flusso OAuth standard. L'utente può anche scegliere di creare un nuovo account con le informazioni del suo profilo Google.
Per eseguire il collegamento degli account con il tipo di collegamento semplificato, segui questi passaggi generali:
- Per prima cosa, chiedi all'utente di dare il consenso per accedere al suo profilo Google.
- Utilizza le informazioni nel profilo per identificare l'utente.
- Se non riesci a trovare una corrispondenza per l'utente Google nel tuo sistema di autenticazione,
il flusso procede a seconda che tu abbia configurato il tuo progetto Azioni
nella console Azioni per consentire la creazione di account utente tramite voce o solo sul
tuo sito web.
- Se consenti la creazione di account tramite comandi vocali, convalida il token ID ricevuto da Google. Puoi quindi creare un utente in base alle informazioni del profilo contenute nel token ID.
- Se non consenti la creazione di account tramite la voce, l'utente viene trasferito a un browser in cui può caricare la tua pagina di autorizzazione e completare il flusso di creazione dell'utente.
Supportare la creazione di account tramite voce
Se consenti la creazione di account utente tramite comandi vocali, l'assistente chiede all'utente se vuole fare quanto segue:
- Crea un nuovo account sul tuo sistema utilizzando le informazioni del suo Account Google oppure
- Accedi al tuo sistema di autenticazione con un altro account se hai un account non Google esistente.
La creazione dell'account tramite comandi vocali è consigliata se vuoi ridurre al minimo l'attrito del flusso di creazione dell'account. L'utente deve uscire dal flusso vocale solo se vuole accedere utilizzando un account non Google esistente.
Non consentire la creazione di account tramite comandi vocali
Se non hai consentito la creazione di account utente tramite la voce, l'assistente apre l'URL del sito web che hai fornito per l'autenticazione utente. Se l'interazione avviene su un dispositivo senza schermo, l'assistente indirizza l'utente a uno smartphone per continuare il flusso di collegamento dell'account.
Il divieto di creazione è consigliato se:
Non vuoi consentire agli utenti che hanno account non Google di creare un nuovo account utente e vuoi che si colleghino ai loro account utente esistenti nel tuo sistema di autenticazione. Ad esempio, se offri un programma fedeltà, potresti voler assicurarti che l'utente non perda i punti accumulati sul suo account esistente.
Devi avere il controllo completo del flusso di creazione dell'account. Ad esempio, potresti non consentire la creazione se devi mostrare i termini di servizio all'utente durante la creazione dell'account.
Implementare il collegamento "semplificato" di Accedi con Google basato su OAuth
Gli account vengono collegati con i flussi OAuth 2.0 standard di settore. Actions on Google supporta i flussi implicito e del codice di autorizzazione.
Nel flusso del codice implicito, Google apre il tuo endpoint di autorizzazione nel browser dell'utente. Dopo aver eseguito l'accesso, restituisci a Google un token di accesso di lunga durata. Questo token di accesso è ora incluso in ogni richiesta inviata dall'assistente alla tua azione.
Nel flusso del codice di autorizzazione, sono necessari due endpoint:
- L'endpoint di autorizzazione, che è responsabile della presentazione dell'interfaccia utente di accesso agli utenti che non hanno ancora eseguito l'accesso, nonché della registrazione del consenso all'accesso richiesto sotto forma di codice di autorizzazione di breve durata.
- L'endpoint token scambio, che è responsabile di due tipi di scambi:
- 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 esegue il flusso di collegamento dell'account.
- Scambia un token di aggiornamento di lunga durata con un token di accesso di breve durata. Questa piattaforma di scambio avviene quando Google ha bisogno di un nuovo token di accesso perché quello scaduto.
Anche se il flusso del codice implicito è più facile da implementare, Google consiglia che i token di accesso emessi utilizzando il flusso implicito non scadano mai, perché l'uso della scadenza del token con il flusso implicito obbliga l'utente a collegare di nuovo il proprio account. Se per motivi di sicurezza è necessaria la scadenza del token, ti consigliamo di utilizzare il flusso del codice di autenticazione.
Configurare il progetto
Per configurare il progetto in modo da utilizzare il collegamento semplificato:
- Apri la console Actions e seleziona il progetto che vuoi utilizzare.
- Fai clic sulla scheda Sviluppa e scegli Collegamento dell'account.
- Attiva l'opzione accanto a Collegamento degli account.
- Nella sezione Creazione account, seleziona Sì.
In Tipo di collegamento, seleziona OAuth e accesso con Google e Implicito.
In Informazioni cliente, segui questi passaggi:
- Assegna un valore a ID client emesso da Actions on Google per identificare le richieste provenienti da Google.
- Inserisci gli URL per gli endpoint di autorizzazione e scambio di token.
Fai clic su Salva.
Implementa il server OAuth
为了支持 OAuth 2.0 隐式流程,您的服务会进行授权 端点。此端点负责 就数据访问征得用户同意。授权端点 向尚未登录的用户显示登录界面,并记录 同意所请求的访问。
当您的 Action 需要调用您的某项授权的 API 时,Google 会使用 此端点来获得用户许可,以在其上调用这些 API 。
由 Google 发起的典型 OAuth 2.0 隐式流会话具有以下特征: 以下流程:
- Google 会在用户的浏览器中打开您的授权端点。通过 如果用户尚未登录,则可以登录,并且授予 Google 访问 通过您的 API 访问其数据(如果尚未授予权限)。
- 您的服务会创建一个访问令牌并将其返回给 通过使用访问令牌将用户的浏览器重定向回 Google, 附件。
- Google 调用您的服务的 API,并使用 。您的服务会验证访问令牌是否向 Google 授予 访问 API 的授权,然后完成 API 调用。
处理授权请求
当您的 Action 需要通过 OAuth 2.0 隐式流程执行账号关联时, Google 会通过包含以下内容的请求将用户发送到您的授权端点: 以下参数:
| 授权端点参数 | |
|---|---|
client_id |
您分配给 Google 的客户 ID。 |
redirect_uri |
此请求的响应发送到的网址。 |
state |
将一个在 重定向 URI。 |
response_type |
要在响应中返回的值的类型。对于 OAuth 2.0 隐式
则响应类型始终为 token。 |
例如,如果您的授权端点可通过 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
为了让授权端点能够处理登录请求,请执行以下步骤:
验证
client_id和redirect_uri值, 防止向意外或配置错误的客户端应用授予访问权限:- 确认
client_id是否与您的客户端 ID 匹配 分配给 Google。 - 确认
redirect_uri指定的网址 参数的格式如下: YOUR_PROJECT_ID 是项目设置页面上的 ID Actions 控制台界面。https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
- 确认
检查用户是否已登录您的服务。如果用户未登录 中,完成服务的登录或注册流程。
生成 Google 将用于访问您的 API 的访问令牌。通过 访问令牌可以是任何字符串值,但必须唯一地表示 令牌对应的用户和客户端,且不得被猜到。
发送 HTTP 响应,将用户浏览器重定向到相应网址 由
redirect_uri参数指定。添加所有 以下参数:access_token:您刚刚生成的访问令牌token_type:字符串bearerstate:原始状态的未修改状态值 请求 以下是生成的网址示例: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 会将该令牌附加到后续调用
作为 AppRequest 的一部分添加到您的 Action。
Gestire il collegamento automatico
Dopo che l'utente ha dato il consenso all'azione per accedere al suo profilo Google, Google invia una richiesta contenente un'asserzione firmata dell'identità dell'utente Google. L'asserzione contiene informazioni che includono l'ID, il nome e e indirizzo email. L'endpoint dello scambio di token configurato per gli handle del progetto a quella richiesta.
Se l'Account Google corrispondente è già presente nel tuo sistema di autenticazione,
l'endpoint dello scambio di token restituisce un token per l'utente. Se l'Account Google non
corrisponde a un utente esistente, l'endpoint di scambio di token restituisce un errore user_not_found.
La richiesta ha il seguente modulo:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=get&assertion=JWT&consent_code=CONSENT_CODE&scope=SCOPES
L'endpoint di scambio di token deve essere in grado di gestire i seguenti parametri:
| Parametri endpoint token | |
|---|---|
grant_type |
Il tipo di token che viene scambiato. Per queste richieste,
ha il valore urn:ietf:params:oauth:grant-type:jwt-bearer. |
intent |
Per queste richieste, il valore di questo parametro è "get". |
assertion |
un token JWT (JSON Web Token) che fornisce un'asserzione firmata dei l'identità dell'utente. Il JWT contiene informazioni che includono i dati Google dell'utente ID account, nome e indirizzo email. |
consent_code |
Facoltativo: se presente, un codice monouso che indica che la proprietà l'utente ha concesso il consenso all'azione per accedere agli ambiti specificati. |
scope |
Facoltativo: tutti gli ambiti che hai configurato Google per richiedere agli utenti. |
Quando l'endpoint di scambio di token riceve la richiesta di collegamento, dovrebbe eseguire seguenti:
convalida e decodifica l'asserzione JWT
Puoi convalidare e decodificare l'asserzione JWT utilizzando una libreria di decodifica JWT per il tuo linguaggio. Utilizza le chiavi pubbliche di Google (disponibili in JWK o PEM) per verificare il token firma.
Una volta decodificata, l'asserzione JWT è simile all'esempio seguente:
{ "sub": 1234567890, // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "locale": "en_US" }
Oltre a verificare la firma del token, verifica che l'emittente dell'asserzione
(campo iss) è https://accounts.google.com e che il segmento di pubblico (campo aud)
è l'ID client assegnato all'Azione.
Controllare se l'Account Google è già presente nel sistema di autenticazione
Controlla se è vera una delle seguenti condizioni:
- L'ID Account Google, trovato nel campo
subdell'asserzione, è nel database degli utenti. - L'indirizzo email nell'asserzione corrisponde a un utente nel tuo database utenti.
Se una delle condizioni è vera, l'utente si è già registrato e puoi emettere un token di accesso.
Se né l'ID Account Google né l'indirizzo email specificato nell'asserzione
corrisponde a un utente presente nel tuo database, l'utente non si è ancora registrato. In questo caso,
l'endpoint dello scambio di token deve rispondere con un errore HTTP 401, che specifica error=user_not_found,
come nell'esempio seguente:
HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8
{
"error":"user_not_found",
}
user_not_found, Google
chiama l'endpoint di scambio di token con il valore del parametro intent
impostata su create e invia un token ID contenente le informazioni del profilo dell'utente.
con la richiesta.
Gestire la creazione di account tramite Accedi con Google
Quando un utente deve creare un account nel tuo servizio, Google effettua una
una richiesta all'endpoint di scambio di token che specifica
intent=create, come nell'esempio seguente:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded response_type=token&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=SCOPES&intent=create&consent_code=CONSENT_CODE&assertion=JWT[&NEW_ACCOUNT_INFO]
Il parametro assertion contiene un token JWT (JSON Web Token) che fornisce
un'asserzione firmata dell'identità dell'utente Google. Il JWT contiene informazioni
che include l'ID, il nome e l'indirizzo email dell'Account Google dell'utente, che puoi utilizzare
per creare un nuovo account nel tuo servizio.
Per rispondere alle richieste di creazione degli account, l'endpoint di scambio di token deve eseguire l'operazione le seguenti:
convalida e decodifica l'asserzione JWT
Puoi convalidare e decodificare l'asserzione JWT utilizzando una libreria di decodifica JWT per il tuo linguaggio. Utilizza le chiavi pubbliche di Google (disponibili in JWK o PEM) per verificare il token firma.
Una volta decodificata, l'asserzione JWT è simile all'esempio seguente:
{ "sub": 1234567890, // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "locale": "en_US" }
Oltre a verificare la firma del token, verifica che l'emittente dell'asserzione
(campo iss) è https://accounts.google.com e che il segmento di pubblico (campo aud)
è l'ID client assegnato all'Azione.
Convalida le informazioni dell'utente e crea un nuovo account
Controlla se è vera una delle seguenti condizioni:
- L'ID Account Google, trovato nel campo
subdell'asserzione, è nel database degli utenti. - L'indirizzo email nell'asserzione corrisponde a un utente nel tuo database utenti.
Se una delle condizioni è vera, chiedi all'utente di collegare il suo account esistente a
l'Account Google rispondendo alla richiesta con un errore HTTP 401, specificando
error=linking_error e l'indirizzo email dell'utente come login_hint, come nell'
nell'esempio seguente:
HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8
{
"error":"linking_error",
"login_hint":"foo@bar.com"
}
Se nessuna delle due condizioni è vera, crea un nuovo account utente utilizzando le informazioni forniti nel JWT. In genere per i nuovi account non è impostata una password. È ti consigliamo di aggiungere l'opzione Accedi con Google ad altre piattaforme per consentire agli utenti di accedere tramite Google su tutte le piattaforme della tua applicazione. In alternativa, puoi invia all'utente via email un link che avvia il flusso di recupero della password per consentirgli di impostare una password per accedere su altre piattaforme.
Al termine della creazione, invia un token di accesso e restituisce i valori in un oggetto JSON in il corpo della risposta HTTPS, come nell'esempio seguente:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Progettare l'interfaccia utente vocale per il flusso di autenticazione
Verifica se l'utente è verificato e avvia il flusso di collegamento degli account
- Apri il progetto Actions Builder nella console Actions.
- Crea una nuova scena per avviare il collegamento dell'account nella tua azione:
- Fai clic su Scene.
- Fai clic sull'icona Aggiungi (+) per aggiungere una nuova scena.
- Nella scena appena creata, fai clic sull'icona Aggiungi add per Condizioni.
- Aggiungi una condizione che verifichi se l'utente associato alla conversazione è un
utente verificato. Se il controllo non va a buon fine, l'Azione non può eseguire il collegamento dell'account
durante la conversazione e deve ripiegare sull'accesso
a funzionalità che non richiedono il collegamento dell'account.
- Nel campo
Enter new expressionin Condizione, inserisci la seguente logica:user.verificationStatus != "VERIFIED" - In Transizione, seleziona una scena che non richiede il collegamento dell'account o una scena che è il punto di accesso alla funzionalità solo per gli ospiti.
- Nel campo

- Fai clic sull'icona di aggiunta add per Condizioni.
- Aggiungi una condizione per attivare un flusso di collegamento dell'account se l'utente non ha
un'identità associata.
- Nel campo
Enter new expressionin Condizione, inserisci la seguente logica:user.verificationStatus == "VERIFIED" - Nella sezione Transizione, seleziona la scena di sistema Collegamento dell'account.
- Fai clic su Salva.
- Nel campo

Dopo il salvataggio, al progetto viene aggiunta una nuova scena del sistema di collegamento degli account chiamata <SceneName>_AccountLinking.
Personalizzare la scena di collegamento degli account
- Nella sezione Scene, seleziona la scena del sistema di collegamento degli account.
- Fai clic su Invia prompt e aggiungi una breve frase per descrivere all'utente perché l'azione deve accedere alla sua identità (ad esempio "Per salvare le tue preferenze").
- Fai clic su Salva.

- In Condizioni, fai clic su Se l'utente completa correttamente il collegamento degli account.
- Configura la modalità di avanzamento del flusso se l'utente accetta di collegare il proprio account. Ad esempio, chiama il webhook per elaborare qualsiasi logica di business personalizzata richiesta e torna alla scena di origine.
- Fai clic su Salva.

- Nella sezione Condizioni, fai clic su Se l'utente annulla o ignora il collegamento all'account.
- Configura la modalità di procedere del flusso se l'utente non accetta di collegare il proprio account. Ad esempio, invia un messaggio di conferma e reindirizza alle scene che forniscono funzionalità che non richiedono il collegamento dell'account.
- Fai clic su Salva.

- Nella sezione Condizioni, fai clic su Se si verifica un errore di sistema o di rete.
- Configura la modalità di procedere del flusso se il flusso di collegamento dell'account non può essere completato a causa di errori di sistema o di rete. Ad esempio, invia un messaggio di conferma e reindirizza alle scene che forniscono funzionalità che non richiedono il collegamento dell'account.
- Fai clic su Salva.
Gestire le richieste di accesso ai dati
Se la richiesta dell'assistente contiene un token di accesso, verifica prima che il token di accesso sia valido e non scaduto, poi recupera dal tuo database degli account utente l'account utente associato al token.