El tipo vinculación de OAuth admite dos flujos de OAuth estándar de la industria: los flujos de código implícito y de autorización.
En el flujo de código implícito, Google abre tu extremo de autorización en el navegador del usuario. Después de acceder correctamente, devuelves un token de acceso de larga duración a Google. Este token de acceso ahora se incluye en cada solicitud que envía el Asistente a tu acción.
En el flujo de código de autorización, necesitas dos extremos:
- El extremo de autorización, que es responsable de presentar la IU de acceso a los usuarios que aún no han accedido, y de registrar el consentimiento para el acceso solicitado en forma de código de autorización de corta duración.
- El extremo de intercambio de tokens, que es responsable de dos tipos de intercambios:
- Intercambia un código de autorización por un token de actualización de larga duración y un token de acceso de corta duración. Este intercambio se lleva a cabo cuando el usuario pasa por el flujo de vinculación de cuentas.
- Intercambia un token de actualización de larga duración por un token de acceso de corta duración. Este intercambio se produce cuando Google necesita un nuevo token de acceso porque venció.
Si bien el flujo de código implícito es más fácil de implementar, Google recomienda que los tokens de acceso emitidos mediante el flujo implícito nunca venzan, ya que el uso de la caducidad del token con el flujo implícito obliga al usuario a vincular su cuenta de nuevo. Si necesitas un vencimiento de token por razones de seguridad, deberías considerar usar el flujo de código de Auth en su lugar.
Implementa la vinculación de cuentas de OAuth
Configura el proyecto
Para configurar tu proyecto de modo que use la vinculación de OAuth, sigue estos pasos:
- Abre la Consola de Actions y selecciona el proyecto que quieres usar.
- Haga clic en la pestaña Desarrollar y seleccione Vinculación de cuentas.
- Habilite la opción Vinculación de la cuenta.
- En la sección Creación de cuentas, seleccione No, solo deseo permitir la creación de cuentas en mi sitio web.
En Linking type, seleccione OAuth y, también, Implicit.
En Información del cliente:
- Asigna un valor al ID de cliente emitido por tus acciones para Google a fin de identificar las solicitudes que provienen de Google.
- Inserte las URL de los extremos de autorización y de intercambio de tokens.
- Haz clic en Guardar.
Implementa tu servidor OAuth
Para admitir el flujo implícito de OAuth 2.0, tu servicio hace que un extremo de autorización esté disponible mediante HTTPS. Este extremo es responsable de la autenticación y la obtención del consentimiento de los usuarios para el acceso a los datos. El extremo de autorización presenta una IU de acceso a los usuarios que aún no han accedido y registran el consentimiento solicitado.
Cuando tu acción necesita llamar a una de las API autorizadas de tu servicio, Google usa este extremo a fin de obtener el permiso de tus usuarios para llamar a estas API en su nombre.
Una sesión de flujo implícito típica de OAuth 2.0 que inicia Google tiene el siguiente flujo:
- Google abre tu extremo de autorización en el navegador del usuario. Si el usuario no accedió, le otorga permiso a Google para acceder a sus datos con tu API, si aún no lo ha hecho.
- Tu servicio crea un token de acceso y lo muestra a Google mediante el redireccionamiento del navegador del usuario a Google con el token de acceso adjunto a la solicitud.
- Google llama a las API de tu servicio y adjunta el token de acceso con cada solicitud. Tu servicio verifica que el token de acceso le otorgue a Google una autorización para acceder a la API y, luego, completa la llamada a la API.
Administra solicitudes de autorización
Cuando tu acción necesita vincular cuentas mediante un flujo implícito de OAuth 2.0, Google envía al usuario a tu extremo de autorización con una solicitud que incluye los siguientes parámetros:
Parámetros del extremo de autorización | |
---|---|
client_id |
El ID de cliente que le asignaste a Google. |
redirect_uri |
La URL a la que se envía la respuesta a esta solicitud. |
state |
Un valor de contabilidad que se devuelve a Google sin cambiar en el URI de redireccionamiento. |
response_type |
El tipo de valor que se muestra en la respuesta. Para el flujo implícito de OAuth 2.0, el tipo de respuesta siempre es token . |
Por ejemplo, si tu extremo de autorización está disponible en https://myservice.example.com/auth
, una solicitud podría verse de la siguiente manera:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token
Para que tu extremo de autorización controle las solicitudes de acceso, sigue estos pasos:
Verifica los valores
client_id
yredirect_uri
para evitar otorgar acceso a apps cliente no deseadas o mal configuradas:- Confirma que
client_id
coincida con el ID de cliente que le asignaste a Google. - Confirma que la URL especificada por el parámetro
redirect_uri
tenga el siguiente formato:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
YOUR_PROJECT_ID es el ID que se encuentra en la página Configuración del proyecto de la Consola de Actions.
- Confirma que
Verifica si el usuario accedió a tu servicio. Si el usuario no accedió, completa el flujo de acceso o registro del servicio.
Genera un token de acceso que Google usará para acceder a tu API. El token de acceso puede ser cualquier valor de string, pero debe representar de forma única al usuario y al cliente, para los que es token y no debe ser adivinable.
Envía una respuesta HTTP que redireccione el navegador del usuario a la URL que especifica el parámetro
redirect_uri
. Incluye todos los siguientes parámetros en el fragmento de URL:access_token
: Es el token de acceso que acabas de generar.token_type
: Es la stringbearer
.state
: El valor de estado sin modificar de la solicitud original. El siguiente es un ejemplo de la URL resultante:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
El controlador de redireccionamiento de OAuth 2.0 de Google recibirá el token de acceso y confirmará que el valor state
no haya cambiado. Una vez que Google haya obtenido un token de acceso para tu servicio, lo adjuntará a llamadas posteriores a tu acción como parte de AppRequest.
Diseña la interfaz de usuario de voz para el flujo de autenticación
Verifica si el usuario está verificado y comienza el flujo de vinculación de cuentas
- Abre tu proyecto de Actions Builder en Actions Console.
- Crea una escena nueva para iniciar la vinculación de cuentas en tu acción:
- Haz clic en Escenas.
- Haga clic en el ícono de agregar (+) para agregar una escena nueva.
- En la escena recién creada, haz clic en el ícono de agregar add para Condiciones.
- Agrega una condición que verifique si el usuario asociado con la conversación es un usuario verificado. Si la verificación falla, tu acción no podrá realizar la vinculación de cuentas durante la conversación y debería recurrir a proporcionar acceso a una funcionalidad que no requiera la vinculación de cuentas.
- En el campo
Enter new expression
, en Condition, ingresa la siguiente lógica:user.verificationStatus != "VERIFIED"
- En Transition, selecciona una escena que no requiere vinculación de cuentas o una escena que es el punto de entrada a la funcionalidad solo para invitados.
- En el campo
- Haz clic en el ícono de agregar add en Condiciones.
- Agrega una condición para activar un flujo de vinculación de cuentas si el usuario no tiene una identidad asociada.
- En el campo
Enter new expression
en Condición, ingresa la siguiente lógica:user.verificationStatus == "VERIFIED"
- En Transition, selecciona la escena del sistema Vinculación de cuentas.
- Haz clic en Guardar.
- En el campo
Después de guardar, se agrega a tu proyecto una escena nueva del sistema de vinculación de cuentas llamada <SceneName>_AccountLinking
.
Cómo personalizar la escena de vinculación de cuentas
- En Scenes, selecciona la escena del sistema de vinculación de cuentas.
- Haz clic en Send prompts y agrega una oración corta para describir al usuario por qué la acción necesita acceder a su identidad (por ejemplo, "Para guardar tus preferencias").
- Haz clic en Guardar.
- En Condiciones, haga clic en Si el usuario completa correctamente la vinculación de la cuenta.
- Configura cómo debe proceder el flujo si el usuario acepta vincular su cuenta. Por ejemplo, llama al webhook para procesar cualquier lógica empresarial personalizada necesaria y volver a la escena de origen.
- Haz clic en Guardar.
- En Condiciones, haz clic en Si el usuario cancela o descarta la vinculación de cuentas.
- Configura cómo debe proceder el flujo si el usuario no acepta vincular su cuenta. Por ejemplo, envía un mensaje de confirmación y redirecciona a las escenas que proporcionen una funcionalidad que no requiera la vinculación de cuentas.
- Haz clic en Guardar.
- En Condiciones, haz clic en Si se produce un error de sistema o de red.
- Configura cómo debe proceder el flujo si no se puede completar el flujo de vinculación de cuentas debido a errores del sistema o de la red. Por ejemplo, envía un mensaje de confirmación y redirecciona a las escenas que proporcionen una funcionalidad que no requiera la vinculación de cuentas.
- Haz clic en Guardar.
Controlar solicitudes de acceso a datos
Si la solicitud del Asistente contiene un token de acceso, primero verifica que el token de acceso sea válido (y no haya vencido) y, luego, recupera la cuenta de usuario asociada de tu base de datos.