Adición de autenticación a un bot

SE APLICA A: SDK v4

El SDK de Servicio de Bot de Azure AI v4 facilita el desarrollo de bots que pueden acceder a recursos en línea que requieren autenticación de usuario. El bot no necesita administrar tokens de autenticación porque Azure lo hace automáticamente mediante OAuth 2.0 para generar un token basado en las credenciales de cada usuario. El bot usa el token generado por Azure para acceder a esos recursos. De esta manera, el usuario no tiene que proporcionar el identificador y la contraseña al bot para acceder a un recurso protegido, sino solo a un proveedor de identidades de confianza.

Para obtener información general sobre cómo controla Bot Framework este tipo de autenticación, consulte Autenticación del usuario.

En este artículo se hace referencia a dos ejemplos. Uno muestra cómo obtener un token de autenticación. El otro es más complejo y muestra cómo acceder a Microsoft Graph en nombre del usuario. En ambos casos, puede usar Azure AD v1 o Azure AD v2 como proveedor de identidades para obtener un token de OAuth para el bot. En este artículo se describe cómo hacer lo siguiente:

  • Creación de un recurso de Azure Bot Service
  • Creación del proveedor de identidades de Microsoft Entra ID
  • Registro del proveedor de identidades de Microsoft Entra ID con el bot
  • Preparación del código del bot

Una vez que termine este artículo, tendrá un bot que puede responder a algunas tareas sencillas. En el ejemplo de Microsoft Graph, puede enviar un correo electrónico, mostrar quién es y comprobar correos electrónicos recientes. No es necesario publicar el bot para probar las características de OAuth; sin embargo, el bot necesitará un identificador y una contraseña de aplicación de Azure válidos.

Nota:

Los SDK de JavaScript, C# y Python de Bot Framework seguirán siendo compatibles, pero el SDK de Java se va a retirar con la compatibilidad final a largo plazo que finaliza en noviembre de 2023. Solo se realizarán correcciones críticas de seguridad y errores dentro de este repositorio.

Los bots existentes creados con el SDK de Java seguirán funcionando.

Para la creación de nuevos bots, considera el uso de Power Virtual Agents y lee sobre cómo elegir la solución de bot de chat adecuada.

Para obtener más información, consulte El futuro de la creación de bots.

Consideraciones de Web Chat y Direct Line

Importante

Debe usar Direct Line con la autenticación mejorada habilitada para mitigar los riesgos de seguridad al conectarse a un bot mediante el control Chat en web. Para obtener más información, consulte Autenticación mejorada de Direct Line.

Requisitos previos

  • Conocimientos sobre conceptos básicos de los bots, administración de estado, biblioteca de diálogos, implementación de flujos de conversación secuenciales y reutilización de diálogos.

  • Conocimientos de desarrollo de Azure y OAuth 2.0.

  • Visual Studio 2017 o versiones posteriores para .NET.

  • Node.js para JavaScript.

  • Python 3.8+ para Python.

  • Uno de los ejemplos que se enumeran a continuación.

    Ejemplo Versión de BotBuilder Demostraciones
    Autenticación en C# o JavaScript o Java o Python v4 Compatibilidad con OAuthCard
    Autenticación para Microsoft Graph en C# o JavaScript o Java o Python v4 Compatibilidad de Microsoft Graph API con OAuth 2.0
    Autenticación para Microsoft Teams en C# o JavaScript o Java o Python v4 Compatibilidad de Microsoft Graph API con OAuth 2.0

    Para ejecutar los ejemplos a los que se hace referencia en este artículo, necesitará:

    • Una aplicación de Microsoft Entra ID con la que se va a registrar un recurso de bot en Azure. Esta aplicación permite que el bot acceda a un recurso protegido externo, como Microsoft Graph. También permite que el usuario se comunique con el bot a través de varios canales, como Chat en web.
    • Una aplicación de Microsoft Entra ID independiente para que funcione como proveedor de identidades. Esta aplicación proporciona las credenciales necesarias para establecer una conexión de OAuth entre el bot y el recurso protegido. Tenga en cuenta que en este artículo se usa Active Directory como proveedor de identidades. También se admiten muchos otros proveedores.

Importante

Cuando se registra un bot en Azure, se le asigna una aplicación de Microsoft Entra ID. Sin embargo, esta aplicación protege el acceso del canal al bot. Necesita una aplicación de Microsoft Entra ID adicional para cada recurso protegido externo al que desea que el bot tenga acceso en nombre del usuario.

Crear el recurso

Crea el recurso de Azure Bot, que te permitirá registrar el bot con Servicio de Bot de Azure AI.

Sugerencia

No se pueden crear nuevos recursos de bot de aplicación web y registro de canales de bot; sin embargo, los recursos existentes configurados e implementados seguirán funcionando. Los bots creados a partir de una plantilla VSIX o Yeoman a partir de la versión 4.14.1.2 del SDK o posterior contienen plantillas de ARM que generarán un recurso de Azure Bot.

  1. Vaya a Azure Portal.

  2. En el panel derecho, selecciona Crear un recurso.

  3. Escribe bot en el cuadro de búsqueda y, luego, presiona Entrar.

  4. Selecciona la tarjeta Azure Bot.

    Select Azure bot resource

  5. Seleccione Crear.

  6. Escribe los valores en los campos obligatorios y revisa y actualiza la configuración.

    1. Proporciona información en Detalles del proyecto. Selecciona si el bot tendrá residencia de datos global o local. Actualmente, la característica de residencia de datos local está disponible para los recursos de la región "westeurope" y "centralindia". Para obtener más información, consulta Regionalización en Servicio de Bot de Azure AI.

      The project details settings for an Azure Bot resource

    2. Proporciona información en identificador de aplicación de Microsoft. Selecciona cómo se administrará la identidad del bot en Azure y si deseas crear una nueva identidad o usar una existente.

      The Microsoft app ID settings for an Azure Bot resource

  7. Seleccione Revisar + crear.

  8. Si se superan las pruebas de validación, selecciona Crear.

  9. Cuando finalice la implementación, seleccione Ir al recurso. Deberías ver el bot y los recursos relacionados que aparecen en el grupo de recursos que seleccionaste.

  10. Si aún no tienes el SDK Bot Framework, selecciona Descargar en GitHub para obtener información sobre cómo consumir los paquetes para tu idioma preferido.

    Create bot in SDK

Ya estás listo para compilar el bot con Bot Framework SDK.

Sugerencia

Cuando Azure crea un nuevo recurso de Azure Bot de inquilino único o multiinquilino con un nuevo identificador de aplicación, también genera una contraseña.

Información de identidad del bot

Sigue estos pasos para agregar información de identidad al archivo de configuración del bot. El archivo difiere en función del lenguaje de programación que utilizas para crear el bot.

Importante

Las versiones de Java y Python del SDK de Bot Framework solo admiten bots multiinquilino. Las versiones de C# y JavaScript admiten los tres tipos de aplicación para administrar la identidad del bot.

Lenguaje Nombre de archivo Notas
C# appsettings.json Admite los tres tipos de aplicación para administrar la identidad del bot.
JavaScript .env Admite los tres tipos de aplicación para administrar la identidad del bot.
Java application.properties Solo admite bots multiinquilino.
Python config.py Solo admite bots multiinquilino. Proporcione las propiedades de identidad como argumentos a las llamadas del método os.environ.get.

La información de identidad que necesitas agregar depende del tipo de aplicación del bot. Proporciona los siguientes valores en el archivo de configuración.

Disponible solo para bots de JavaScript y C#.

Propiedad Valor
MicrosoftAppType UserAssignedMSI
MicrosoftAppId Id. de cliente de la identidad administrada asignada por el usuario.
MicrosoftAppPassword No aplicable. Deja esto en blanco para un bot de identidad administrada asignada por el usuario.
MicrosoftAppTenantId El id. de inquilino de la identidad administrada asignada por el usuario.

Para actualizar el servicio de aplicaciones

Si tienes un recurso de App Service (aplicación web) existente para el bot y el bot es una aplicación de identidad administrada asignada por el usuario, es posible que tengas que actualizar el servicio de aplicaciones del bot:

  1. Ve a la hoja de App Service de la aplicación web del bot.
  2. En Configuración, seleccione Identidad.
  3. En la hoja Identidad, selecciona Asignación de usuario yAgregar (+).
  4. En la hoja identidad administrada asignada por el usuario:
    1. Seleccione su suscripción.

    2. En Identidades administradas asignadas por el usuario, selecciona la identidad administrada del bot. Si la identidad administrada se generó automáticamente, tendrá el mismo nombre que el bot.

    3. Selecciona Agregar para usar esta identidad para el bot.

      The App Service Identity blade with the managed identity for the bot selected.

Para obtener la aplicación o el identificador de inquilino

Para obtener la aplicación o el identificador de inquilino del bot:

  1. Ve a la hoja de recursos del bot de Azure para el bot.
  2. Ve a la hoja Configuración del bot. En esta hoja, puedes copiar el identificador de aplicación de Microsoft del bot o el identificador de inquilino de la aplicación.

Generación de una nueva contraseña

Los bots de inquilino único y multiinquilino tienen un secreto de aplicación o una contraseña que necesitas para algunas operaciones. Azure AI Bot Service oculta el secreto del bot. Sin embargo, el propietario del recurso de App Service del bot puede generar una nueva contraseña:

  1. Ve a la hoja de recursos del bot de Azure para el bot.
  2. Ve a la hoja Configuración del bot.
  3. Selecciona Administrar, junto a identificador de aplicación de Microsoft, para ir a la hoja Certificados y secretos del servicio de aplicaciones.
  4. Siga las instrucciones de la hoja para crear un nuevo secreto de cliente y registrar el valor en un lugar seguro.

Microsoft Entra ID es un servicio de identidad

Microsoft Entra ID es un servicio de identidad en la nube que permite crear aplicaciones que inician sesión de forma segura mediante protocolos estándar del sector como OAuth 2.0.

Puede usar uno de estos dos servicios de identidad:

  1. Plataforma para desarrolladores de Microsoft Entra ID (v1.0). También se conoce como punto de conexión de Azure AD v1, que le permite crear aplicaciones que inician sesión de usuario de forma segura con una cuenta profesional o educativa de Microsoft. Para obtener más información, consulte Introducción a Microsoft Entra ID para desarrolladores (v1.0).
  2. Plataforma de identidad de Microsoft (v2.0). También se conoce como punto de conexión de Microsoft Entra ID, que es una evolución de la plataforma de Azure AD (v1.0). Permite crear aplicaciones que inician sesión en todos los proveedores de identidades de Microsoft y obtener tokens para llamar a las API de Microsoft, como Microsoft Graph u otras API que los desarrolladores hayan creado. Para más información, consulte Introducción a la Plataforma de identidad de Microsoft (v2.0).

Para obtener información sobre las diferencias entre los puntos de conexión v1 y v2, consulte Motivos para actualizar a la Plataforma de identidad de Microsoft (v2.0). Para obtener información más completa, consulte Plataforma de identidad de Microsoft (anteriormente Microsoft Entra ID para desarrolladores).

Creación del proveedor de identidades de Microsoft Entra ID

En esta sección se muestra cómo crear un proveedor de identidades de Microsoft Entra ID que usa OAuth 2.0 para autenticar el bot. Puede usar puntos de conexión de Microsoft Entra ID o Azure AD v1.

Sugerencia

Deberá crear y registrar la aplicación de Microsoft Entra ID en un inquilino en el que pueda dar su consentimiento para delegar los permisos solicitados por una aplicación.

  1. Abra el panel Microsoft Entra ID en Azure Portal. Si no está en el inquilino correcto, seleccione Cambiar directorio para cambiar el inquilino. (Para obtener información sobre cómo crear un inquilino, consulte Acceso al portal y creación de un inquilino).

  2. Abra el panel Registros de aplicaciones.

  3. En el panel Registros de aplicaciones, seleccione Nuevo registro.

  4. Rellene los campos obligatorios y cree el registro de aplicaciones.

    1. Asigne un nombre a la aplicación.

    2. Seleccione los tipos de cuenta admitidos para la aplicación. (Cualquiera de estas opciones funcionará con este ejemplo).

    3. En URI de redirección, seleccione Web y establezca la dirección URL en una de las direcciones URL de redirección de OAuth admitidas.

    4. Seleccione Registrar.

      • Una vez creada, Azure muestra la página Información general de la aplicación.
      • Registre el valor del identificador de aplicación (cliente). Usará este valor más adelante como identificador de cliente al crear el cadena de conexión y registrar el proveedor de Microsoft Entra ID con el registro del bot.
      • Registre el valor del identificador de directorio (inquilino). También usará este valor para registrar esta aplicación de proveedor con el bot.
  5. En el panel de navegación, seleccione Certificados y secretos para crear un secreto para la aplicación.

    1. En Secretos de cliente, seleccione Nuevo secreto de cliente.
    2. Agregue una descripción para diferenciar a este secreto de otros que puede que tenga que crear para esta aplicación, como bot login.
    3. En Expira, elija un período de tiempo después del cual expirará el secreto.
    4. Seleccione Agregar.
    5. Antes de salir de Certificados y secretos, registre el secreto. Usará este valor más adelante como el secreto de cliente al registrar la aplicación de Microsoft Entra ID con el bot.
  6. En el panel de navegación, seleccione Permisos de API para que se abra el panel Permisos de API. Es un procedimiento recomendado establecer explícitamente los permisos de API de la aplicación.

    1. Seleccione Agregar un permiso para que aparezca el panel Solicitud de permisos de API.

    2. Para este ejemplo, seleccione Microsoft APIs y Microsoft Graph.

    3. Elija Permisos delegados y asegúrese de que se seleccionan los permisos que necesita. Este ejemplo requiere estos permisos.

      Nota:

      Los permisos marcados como SE NECESITA EL CONSENTIMIENTO DEL ADMINISTRADOR requerirán un usuario y un administrador de inquilinos para iniciar sesión, por lo que evite usarlos para el bot.

      • openid
      • profile
      • Mail.Read
      • Mail.Send
      • User.Read
      • User.ReadBasic.All
    4. Seleccione Agregar permisos. (La primera vez que un usuario acceda a esta aplicación mediante el bot deberá conceder su consentimiento).

Ya tiene configurada una aplicación de Microsoft Entra ID.

Nota:

Asignará el identificador de aplicación (cliente) y el secreto de cliente, al crear la cadena de conexión y registrar el proveedor de identidades con el registro del bot. Consulte la siguiente sección.

Registro del proveedor de identidades de Microsoft Entra ID con el bot

El siguiente paso es registrar el proveedor de identidades con el bot.

  1. Abra la página de recursos Azure Bot de su bot en Azure Portal.

  2. Haga clic en Configuración.

  3. En Configuración de conexión de OAuth, cerca de la parte inferior de la página, seleccione Agregar configuración.

  4. Rellene el formulario de la siguiente manera:

    1. Nombre. Escriba un nombre para la conexión. Lo usará en el código del bot.

    2. Proveedor de servicios. Seleccione Microsoft Entra ID para mostrar los campos específicos de Microsoft Entra ID.

    3. Id. de cliente. Escriba el identificador de aplicación (cliente) que registró para el proveedor de identidades de Microsoft Entra ID.

    4. Secreto de cliente. Escriba el secreto que registró para el proveedor de identidades de Microsoft Entra ID.

      Sugerencia

      Si desea usar certificados, puede seleccionar el proveedor AAD v2 con certificados. Deberá conceder al Servicio de bot Token Store (appid: 5b404cf4-a79d-4cfe-b866-24bf8e1a4921) el permiso para obtener el certificado.

    5. Dirección URL de intercambio de tokens. Déjelo en blanco porque solo se usa para el SSO en Microsoft Entra ID.

    6. Id. de inquilino. Escriba el identificador de directorio (inquilino) que registró anteriormente para la aplicación de Microsoft Entra ID o common (común) según los tipos de cuenta admitidos seleccionados al crear la aplicación de Azure DD. Para decidir qué valor asignar, siga estos criterios:

      • Al crear la aplicación de Microsoft Entra ID, si seleccionó solo las cuentas de este directorio organizativo (solo Microsoft: un solo inquilino), especifique el valor de identificador del inquilino que anotó anteriormente para la aplicación de Microsoft Entra ID.
      • Sin embargo, si seleccionó Cuentas en cualquier directorio organizativo (cualquier directorio de Microsoft Entra ID: multiinquilino y cuentas personales de Microsoft, como Xbox o Outlook.com) o Cuentas en cualquier directorio organizativo (directorio de Microsoft Entra ID: multiinquilino), escriba common en lugar de un identificador de inquilino. De lo contrario, la aplicación de Microsoft Entra ID realizará la verificación en el inquilino cuyo identificador se seleccionó y excluirá las cuentas personales de Microsoft.

      Este será el inquilino asociado a los usuarios que se pueden autenticar. Para más información, consulte Inquilinos en Microsoft Entra ID.

    7. En Ámbitos, escriba los nombres de los permisos que eligió en el registro de la aplicación. Con fines de prueba, puede escribir openid profile.

      Nota:

      Para Microsoft Entra ID, el campo Ámbitos toma una lista de valores que distingue mayúsculas de minúsculas, separados por espacios.

  5. Seleccione Guardar.

Nota:

Estos valores permiten que la aplicación acceda a datos de Office 365 a través de Microsoft Graph API. Además, el campo Dirección URL de intercambio de tokens debe dejarse en blanco porque solo se usa para el inicio de sesión único en Microsoft Entra ID.

Probar la conexión

  1. Seleccione la entrada de la conexión para abrir la conexión que ha creado.
  2. Seleccione Probar conexión en la parte superior del panel Configuración de conexión del proveedor de servicios.
  3. La primera vez, se debería abrir una pestaña del explorador nueva con los permisos que solicita la aplicación y en la que se le pide que acepte.
  4. Seleccione Aceptar.
  5. Esto debería redirigirle a la página Test Connection to <your-connection-name> Succeeded (Resultado satisfactorio de la prueba de conexión a "").

Ahora puede usar este nombre de conexión en el código del bot para recuperar los tokens de usuario.

Preparación del código del bot

Para completar este proceso, necesitará el id. de la aplicación y la contraseña del bot.

  1. Clone desde el repositorio de GitHub el ejemplo con el que desea trabajar: Autenticación de bot o Autenticación de bot para Microsoft Graph.

  2. Actualice appsettings.json:

    • Establezca en ConnectionName el nombre del valor de conexión de OAuth que agregó al bot.

    • Establezca en MicrosoftAppId y MicrosoftAppPassword el id. de la aplicación y secreto de la aplicación del bot.

      En función de los caracteres del secreto del bot, es posible que sea necesario aplicar secuencias de escape XML a la contraseña. Por ejemplo, cualquier símbolo de Y comercial (&) tendrá que codificarse como &amp;.

    {
      "MicrosoftAppType": "",
      "MicrosoftAppId": "",
      "MicrosoftAppPassword": "",
      "MicrosoftAppTenantId": "",
      "ConnectionName": ""
    }
    

    Para usar OAuth en el bot con residencia de datos en la nube pública, debe agregar las siguientes configuraciones en appsettings

    "OAuthUrl": "<Regional-OAuth-Uri>",
    "ToChannelFromBotOAuthScope": "https://api.botframework.com",
    "ToChannelFromBotLoginUrlTemplate": "https://api.botframework.com",
    "PublicAzureChannel": "https://api.botframework.com",
    "ToBotFromChannelOpenIdMetadataUrl": "https://login.botframework.com/v1/.well-known/openidconfiguration",
    "ToBotFromEmulatorOpenIdMetadataUrl": "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration",
    "ToBotFromChannelTokenIssuer": "https://api.botframework.com",
    "ToChannelFromBotLoginUrl": "https://login.microsoftonline.com/botframework.com",
    

    Donde <Regional-OAuth-Url> es uno de los siguientes URI:

    URI Descripción
    https://europe.api.botframework.com Para bots en la nube pública con residencia de datos en Europa.
    https://unitedstates.api.botframework.com Para bots en la nube pública con residencia de datos en Estados Unidos.
    https://india.api.botframework.com Para bots en la nube pública con residencia de datos en La India.
  3. Actualización de Startup.cs:

    Para usar OAuth en nubes de Azure no públicas, como la nube gubernamental, debe agregar el código siguiente en el archivo Startup.cs.

    string uri = "<uri-to-use>";
    MicrosoftAppCredentials.TrustServiceUrl(uri);
    OAuthClientConfig.OAuthEndpoint = uri;
    
    

    Donde <uri-to-use> es uno de los siguientes URI:

    URI Descripción
    https://api.botframework.azure.us Para bots en la nube gubernamental de Estados Unidos sin residencia de datos.
    https://api.botframework.com Para bots en la nube pública sin residencia de datos. Este es el URI predeterminado y no requiere un cambio en Startup.cs.

Para obtener el identificador de aplicación de Microsoft y los valores de contraseña de la aplicación de Microsoft, consulte Obtención de la contraseña de registro.

Nota:

Este código de bot se puede publicar en una suscripción de Azure (para ello, debe seleccionar el proyecto y seleccionar Publicar), pero para este artículo no es necesario. Tendría que establecer una configuración de publicación que usara la aplicación y el plan de hospedaje que usó durante la configuración del bot en Azure Portal.

Prueba del bot en el emulador

Si aún no lo ha hecho, instale Bot Framework Emulator. Consulte también Depuración con el emulador.

Para que el inicio de sesión del bot de ejemplo funcione, debe configurar el emulador tal y como se muestra en Configuración del emulador para autenticación.

Prueba

Después de haber configurado el mecanismo de autenticación, puede realizar las pruebas del bot de ejemplo.

Nota:

Es posible que se le pida que escriba un código magic debido a la manera en que se implementa el ejemplo de bot. Este código magic forma parte de la especificación RFC 7636 y aporta un elemento de seguridad adicional. Al quitar el código magic, aumenta el riesgo para la seguridad. Esto se puede mitigar mediante Direct Line con la autenticación mejorada habilitada. Para más información, consulte Autenticación mejorada de Bot Framework.

  1. Ejecute el bot de ejemplo localmente en su máquina.
  2. Inicie el emulador.
  3. Cuando se conecte al bot, tendrá que especificar el identificador de aplicación y la contraseña del bot.
    • El identificador de aplicación y la contraseña se obtienen del registro de la aplicación en Azure. Son los mismos valores asignados a la aplicación de bot en el archivo appsettings.json o .env. En el emulador, esos valores se asignan en el archivo de configuración o la primera vez que se conecte al bot.
    • Si necesita aplicar secuencias de escape XML a la contraseña en el código de bot, también debe hacerlo aquí.
  4. Escriba help para ver una lista de los comandos disponibles para el bot y probar las características de autenticación.
  5. Una vez que haya iniciado sesión, no es necesario que vuelva a proporcionar las credenciales hasta que cierre la sesión.
  6. Para cerrar la sesión y cancelar la autenticación, escriba logout.

Nota:

La autenticación del bot requiere el uso del servicio Bot Connector. El servicio accede a la información del recurso de Azure Bot.

Ejemplo de autenticación

En el ejemplo de autenticación de un bot, el diálogo está diseñado para recuperar el token del usuario cuando este haya iniciado sesión.

Sample conversation with the authentication sample bot.

Ejemplo de autenticación para Microsoft Graph

En el ejemplo de autenticación de un bot para Microsoft Graph, el diálogo está diseñado para aceptar uyn conjunto limitado de comandos cuando el usuario haya iniciado sesión.

Sample conversation with the Microsoft Graph authentication sample bot.


Información adicional

Cuando un usuario le pide al bot que haga algo para lo que es necesario que el usuario haya iniciado sesión, el bot puede usar OAuthPrompt para iniciar la recuperación de un token para una conexión determinada. OAuthPrompt crea un flujo de recuperación de tokens que consta de:

  1. Comprobación de que Servicio de Bot de Azure AI ya tiene un token para el usuario y la conexión actuales. Si hay un token, este se devuelve.
  2. Si Servicio de Bot de Azure AI no tiene un token almacenado en caché, se crea un elemento OAuthCard que es un botón de inicio de sesión que el usuario puede seleccionar.
  3. Después de que el usuario seleccione el botón de inicio de sesión OAuthCard, Servicio de Bot de Azure AI envía al bot el token del usuario directamente o presenta al usuario un código de autenticación de 6 dígitos para entrar en la ventana de chat.
  4. Si se presenta al usuario un código de autenticación, el bot intercambia este código de autenticación por el token del usuario.

En las secciones siguientes se describe la forma en que el ejemplo implementa algunas tareas de autenticación comunes.

Use un símbolo del sistema de OAuth para que el usuario inicie sesión y obtener un token

Architecture diagram for the C# sample.

Dialogs\MainDialog.cs

Agregue un símbolo del sistema de OAuth a MainDialog en su constructor. En este caso, el valor del nombre de la conexión se recuperó del archivo appsettings.json.

AddDialog(new OAuthPrompt(
    nameof(OAuthPrompt),
    new OAuthPromptSettings
    {
        ConnectionName = ConnectionName,
        Text = "Please Sign In",
        Title = "Sign In",
        Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
    }));

En un paso del diálogo, utilice BeginDialogAsync para iniciar el símbolo del sistema de OAuth, que pide al usuario que inicie sesión.

  • Si el usuario ya ha iniciado sesión, se generará un evento de respuesta de token sin preguntar al usuario.
  • En caso contrario, se le pedirá al usuario que inicie sesión. Servicio de Bot de Azure AI envía el evento de respuesta de token después de que el usuario intenta iniciar sesión.
return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken);

En el paso siguiente del diálogo, compruebe la presencia de un token en el resultado del paso anterior. Si no es NULL, significa que el usuario iniciado sesión correctamente.

// Get the token from the previous step. Note that we could also have gotten the
// token directly from the prompt itself. There is an example of this in the next method.
var tokenResponse = (TokenResponse)stepContext.Result;

Esperar a TokenResponseEvent

Cuando se inicia un símbolo del sistema de OAuth, espera un evento de respuesta del token del que recuperará el token del usuario.

Bots\AuthBot.cs

AuthBot deriva de ActivityHandler y controla explícitamente las actividades del evento de respuesta del token. En este caso, seguimos con el diálogo activo, lo que permite que el símbolo del sistema de OAuth procese el evento y recupere el token.

protected override async Task OnTokenResponseEventAsync(ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
    Logger.LogInformation("Running dialog with Token Response Event Activity.");

    // Run the Dialog with the new Token Response Event Activity.
    await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}

Cierre de la sesión del usuario

Se recomienda encarecidamente permitir a los usuarios cerrar sesión de forma explícita, en lugar de depender de que se agote el tiempo de espera de la conexión.

Dialogs\LogoutDialog.cs

private async Task<DialogTurnResult> InterruptAsync(DialogContext innerDc, CancellationToken cancellationToken = default(CancellationToken))
{
    if (innerDc.Context.Activity.Type == ActivityTypes.Message)
    {
        var text = innerDc.Context.Activity.Text.ToLowerInvariant();

        if (text == "logout")
        {
            // The UserTokenClient encapsulates the authentication processes.
            var userTokenClient = innerDc.Context.TurnState.Get<UserTokenClient>();
            await userTokenClient.SignOutUserAsync(innerDc.Context.Activity.From.Id, ConnectionName, innerDc.Context.Activity.ChannelId, cancellationToken).ConfigureAwait(false);

            await innerDc.Context.SendActivityAsync(MessageFactory.Text("You have been signed out."), cancellationToken);
            return await innerDc.CancelAllDialogsAsync(cancellationToken);
        }
    }

    return null;
}

Incorporación de la autenticación de Teams

OAuth se controla de forma diferente en Teams que en otros canales. El ejemplo de bot de autenticación de Teams (en C#, JavaScript, Java o Python) muestra cómo implementar correctamente la autenticación para Teams.

Información adicional