Il tipo di collegamento OAuth supporta due flussi OAuth 2.0 standard di settore: i flussi di codice implicito e 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.
Implementare il collegamento degli account OAuth
Configura il progetto
Per configurare il progetto per l'utilizzo del collegamento OAuth, segui questi passaggi:
- Apri la console di Actions e seleziona il progetto che vuoi utilizzare.
- Fai clic sulla scheda Sviluppo e scegli Collegamento dell'account.
- Attiva l'opzione Collegamento dell'account.
- Nella sezione Creazione account, seleziona No, voglio consentire la creazione di account solo sul mio sito web.
In Tipo di collegamento, seleziona OAuth e Implicito.
In Informazioni sul cliente:
- Assegna un valore al Client-ID emesso dalle tue Azioni a Google per identificare le richieste provenienti da Google.
- Inserisci gli URL per gli endpoint di autorizzazione e di scambio dei token.
- Fai clic su Salva.
Implementare il server OAuth
To support the OAuth 2.0 implicit flow, your service makes an authorization endpoint available by HTTPS. This endpoint is responsible for authenticating and obtaining consent from users for data access. The authorization endpoint presents a sign-in UI to your users that aren't already signed in and records consent to the requested access.
When your Action needs to call one of your service's authorized APIs, Google uses this endpoint to get permission from your users to call these APIs on their behalf.
A typical OAuth 2.0 implicit flow session initiated by Google has the following flow:
- Google opens your authorization endpoint in the user's browser. The user signs in if not signed in already, and grants Google permission to access their data with your API if they haven't already granted permission.
- Your service creates an access token and returns it to Google by redirecting the user's browser back to Google with the access token attached to the request.
- Google calls your service's APIs, and attaches the access token with each request. Your service verifies that the access token grants Google authorization to access the API and then completes the API call.
Handle authorization requests
When your Action needs to perform account linking via an OAuth 2.0 implicit flow, Google sends the user to your authorization endpoint with a request that includes the following parameters:
Authorization endpoint parameters | |
---|---|
client_id |
The client ID you assigned to Google. |
redirect_uri |
The URL to which you send the response to this request. |
state |
A bookkeeping value that is passed back to Google unchanged in the redirect URI. |
response_type |
The type of value to return in the response. For the OAuth 2.0 implicit
flow, the response type is always token . |
For example, if your authorization endpoint is available at https://myservice.example.com/auth
,
a request might look like:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token
For your authorization endpoint to handle sign-in requests, do the following steps:
Verify the
client_id
andredirect_uri
values to prevent granting access to unintended or misconfigured client apps:- Confirm that the
client_id
matches the client ID you assigned to Google. - Confirm that the URL specified by the
redirect_uri
parameter has the following form:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
YOUR_PROJECT_ID is the ID found on the Project settings page of the Actions Console.
- Confirm that the
Check if the user is signed in to your service. If the user isn't signed in, complete your service's sign-in or sign-up flow.
Generate an access token that Google will use to access your API. The access token can be any string value, but it must uniquely represent the user and the client the token is for and must not be guessable.
Send an HTTP response that redirects the user's browser to the URL specified by the
redirect_uri
parameter. Include all of the following parameters in the URL fragment:access_token
: the access token you just generatedtoken_type
: the stringbearer
state
: the unmodified state value from the original request The following is an example of the resulting URL:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
Google's OAuth 2.0 redirect handler will receive the access token and confirm
that the state
value hasn't changed. After Google has obtained an
access token for your service, Google will attach the token to subsequent calls
to your Action as part of the AppRequest.
Progetta l'interfaccia utente vocale per il flusso di autenticazione
Controlla se l'utente è verificato e avvia la procedura di collegamento dell'account
- Apri il progetto Actions Builder nella console di Actions.
- Crea una nuova scena per avviare il collegamento dell'account nell'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 in Condizioni.
- Aggiungi una condizione che verifichi se l'utente associato alla conversazione è
un utente verificato. Se il controllo ha esito negativo, l'Azione non può eseguire il collegamento dell'account
durante la conversazione e dovrebbe fornire l'accesso a
funzionalità che non richiedono il collegamento dell'account.
- Nel campo
Enter new expression
in Condizione, inserisci la seguente logica:user.verificationStatus != "VERIFIED"
- In Transizione, seleziona una scena che non richieda il collegamento dell'account o che sia il punto di accesso alle funzionalità solo per gli ospiti.
- Nel campo
- Fai clic sull'icona Aggiungi add in Condizioni.
- Aggiungi una condizione per attivare un flusso di collegamento dell'account se all'utente non è associata un'identità.
- Nel campo
Enter new expression
in Condizione, inserisci la seguente logica:user.verificationStatus == "VERIFIED"
- In 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 di sistema di collegamento dell'account denominata <SceneName>_AccountLinking
.
Personalizzare la scena di collegamento dell'account
- In Scene, seleziona la scena di sistema per il collegamento dell'account.
- Fai clic su Invia richiesta e aggiungi una breve frase per descrivere all'utente il motivo per cui 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 dell'account.
- Configura la procedura da seguire nel caso in cui l'utente accetti di collegare il suo account. Ad esempio, chiama il webhook per elaborare qualsiasi logica di business personalizzata richiesta e tornare alla scena di origine.
- Fai clic su Salva.
- In Condizioni, fai clic su Se l'utente annulla o ignora il collegamento dell'account.
- Configura la procedura da seguire nel flusso se l'utente non accetta di collegare il proprio account. Ad esempio, invia un messaggio di conferma e reindirizza a scene che offrono funzionalità che non richiedono il collegamento dell'account.
- Fai clic su Salva.
- In Condizioni, fai clic su Se si verifica un errore di sistema o di rete.
- Configura la procedura da seguire se non è possibile completare il flusso di collegamento dell'account a causa di errori di sistema o di rete. Ad esempio, invia un messaggio di conferma e reindirizza a scene che offrono 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 innanzitutto che il token di accesso sia valido (e non scaduto), quindi recupera l'account utente associato dal database.