Las acciones de conversación dejarán de estar disponibles el 13 de junio de 2023. Para obtener más información, consulta Cómo dar de baja Acciones de conversación.

Vinculación de cuentas con OAuth

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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:
    1. 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.
    2. 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:

  1. Abre la Consola de Actions y selecciona el proyecto que quieres usar.
  2. Haga clic en la pestaña Desarrollar y seleccione Vinculación de cuentas.
  3. Habilite la opción Vinculación de la cuenta.
  4. En la sección Creación de cuentas, seleccione No, solo deseo permitir la creación de cuentas en mi sitio web.

  5. En Linking type, seleccione OAuth y, también, Implicit.

  6. 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.
  1. 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:

  1. 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.
  2. 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.
  3. 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:

  1. Verifica los valores client_id y redirect_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.
  2. Verifica si el usuario accedió a tu servicio. Si el usuario no accedió, completa el flujo de acceso o registro del servicio.

  3. 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.

  4. 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 string bearer.
    • 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

  1. Abre tu proyecto de Actions Builder en Actions Console.
  2. Crea una escena nueva para iniciar la vinculación de cuentas en tu acción:
    1. Haz clic en Escenas.
    2. Haga clic en el ícono de agregar (+) para agregar una escena nueva.
  3. En la escena recién creada, haz clic en el ícono de agregar para Condiciones.
  4. 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.
    1. En el campo Enter new expression, en Condition, ingresa la siguiente lógica: user.verificationStatus != "VERIFIED"
    2. 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.

  1. Haz clic en el ícono de agregar en Condiciones.
  2. Agrega una condición para activar un flujo de vinculación de cuentas si el usuario no tiene una identidad asociada.
    1. En el campo Enter new expression en Condición, ingresa la siguiente lógica: user.verificationStatus == "VERIFIED"
    2. En Transition, selecciona la escena del sistema Vinculación de cuentas.
    3. Haz clic en Guardar.

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

  1. En Scenes, selecciona la escena del sistema de vinculación de cuentas.
  2. 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").
  3. Haz clic en Guardar.

  1. En Condiciones, haga clic en Si el usuario completa correctamente la vinculación de la cuenta.
  2. 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.
  3. Haz clic en Guardar.

  1. En Condiciones, haz clic en Si el usuario cancela o descarta la vinculación de cuentas.
  2. 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.
  3. Haz clic en Guardar.

  1. En Condiciones, haz clic en Si se produce un error de sistema o de red.
  2. 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.
  3. 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.