Autenticación de usuariosUser authentication

se aplica a: SDK V4APPLIES TO: SDK v4

En ocasiones, un bot debe acceder a recursos en línea protegidos en nombre del usuario, como comprobar el correo electrónico, comprobar el estado del vuelo o realizar un pedido.At times a bot must access secured online resources on behalf of the user, such as checking email, checking on flight status, or placing an order. El usuario debe autorizar al bot para que lo haga en su nombre y, para autorizarlo, el usuario debe autenticar su identidad.The user must authorize the bot to do so on their behalf, and in order to authorize the bot, the user must authenticate their identity. OAuth se usa para autenticar al usuario y autorizar al bot.OAuth is used to authenticate the user and authorize the bot. Consulte también Tipos de autenticación.See also Authentication types.

Si desea actualizar sus conocimientos sobre OAuth, consulte los siguientes documentos:If you want to refresh your OAuth knowledge, see the following:

Autenticación del usuario en una conversaciónUser authentication in a conversation

Para realizar determinadas operaciones en nombre de un usuario, como comprobar el correo electrónico, hacer referencia a un calendario, comprobar el estado de un vuelo o realizar un pedido, el bot deberá llamar a un servicio externo, como Microsoft Graph, GitHub o un servicio REST de la empresa.To perform certain operations on behalf of a user, such as checking email, referencing a calendar, checking on flight status, or placing an order, the bot will need to call an external service, such as the Microsoft Graph, GitHub, or a company's REST service. Cada servicio externo tiene una forma de proteger esas llamadas.Each external service has a way of securing those calls. Una forma habitual de emitir esas solicitudes es usar un token de usuario que identifique de forma única al usuario en ese servicio externo (a veces llamado JSON Web Token o JWT).A common way to issue those requests is to use a user token that uniquely identifies the user on that external service (sometimes referred to as a JSON Web Token (JWT)).

Para proteger la llamada a un servicio externo, el bot debe pedir al usuario que inicie sesión para poder adquirir el token del usuario para ese servicio.To secure the call to an external service, the bot must ask the user to sign-in, so it can acquire the user's token for that service. Muchos servicios admiten la recuperación del token mediante el protocolo OAuth o OAuth2.Many services support token retrieval via the OAuth or OAuth2 protocol.

Azure Bot Service ofrece tarjetas y servicios especializados de inicio de sesión que funcionan con el protocolo OAuth y administran el ciclo de vida del token.The Azure Bot Service provides specialized sign-in cards and services that work with the OAuth protocol and manage the token life-cycle. Un bot puede usar estas características para adquirir un token de usuario.A bot can use these features to acquire a user token.

  • Como parte de la configuración del bot, se registra una conexión de OAuth en el recurso de Azure Bot Service en Azure.As part of bot configuration, an OAuth connection is registered within the Azure Bot Service resource in Azure.

    La conexión contiene información sobre el proveedor de identidades que se va a utilizar, junto con un identificador de cliente y un secreto de OAuth válidos, los ámbitos de OAuth que se van a habilitar y cualquier otros metadatos de conexión que requiera ese proveedor de identidades.The connection contains information about the identity provider to use, along with a valid OAuth client ID and secret, the OAuth scopes to enable, and any other connection metadata required by that identity provider.

  • En el código del bot, se usa una conexión de OAuth para ayudar al usuario a que inicie sesión y obtenga el token de usuario.In the bot's code, the OAuth connection is used to help sign-in the user and get the user token.

En la imagen siguiente se muestran los elementos implicados en el proceso de autenticación.The following image shows the elements involved in the authentication process.

componentes de autenticación del bot

Acerca del servicio de token de Bot FrameworkAbout the Bot Framework Token Service

El servicio de token de Framework Bot es responsable de:The Bot Framework Token Service is responsible for:

  • Facilitar el uso del protocolo OAuth con una amplia variedad de servicios externos.Facilitating the use of the OAuth protocol with a wide variety of external services.
  • Almacenar de forma segura los tokens para un bot, canal, conversación y usuario determinados.Securely storing tokens for a particular bot, channel, conversation, and user.
  • Adquirir tokens de usuario.Acquiring user tokens.

    Sugerencia

    Si el bot tiene un token de usuario caducado, el bot debe:If the bot has an expired user token, the bot should:

    • Cierre de la sesión del usuarioLog the user out
    • Reiniciar el flujo de inicio de sesión.Initiate the sign in flow again

Por ejemplo, un bot que puede comprobar los correos electrónicos recientes de un usuario mediante Microsoft Graph API, necesitará un token de usuario de un proveedor de identidades, en este caso, Azure Active Directory.For example, a bot that can check a user's recent emails, using the Microsoft Graph API, requires a user token from an Identity Provider, in this case Azure Active Directory. En tiempo de diseño, el desarrollador del bot realiza estos dos pasos importantes:At design time, the bot developer performs these two important steps:

  1. Registra una aplicación de Azure Active Directory, un proveedor de identidades, con el servicio de token de Bot Framework, mediante Azure Portal.Registers an Azure Active Directory application, an Identity Provider, with the Bot Framework Token Service, via the Azure Portal.
  2. Configura una conexión de OAuth (por ejemplo, llamada GraphConnection) para el bot.Configures an OAuth connection (named for example GraphConnection) for the bot.

En la imagen siguiente se muestra la secuencia de tiempo de la interacción del usuario con un bot cuando se realiza una solicitud de correo electrónico mediante el servicio Microsoft Graph.The following picture shows the time sequence of the user's interaction with a bot when an email request is made using the Microsoft Graph service.

secuencia de tiempo de la autenticación del bot

  1. El usuario realiza una solicitud de correo electrónico al bot.The user makes an email request to the bot.

  2. Una actividad con este mensaje se envía desde el usuario al servicio de canal de Bot Framework.An activity with this message is sent from the user to the Bot Framework channel service. El servicio de canal garantiza que se ha configurado el campo userid de la actividad y que el mensaje se envía al bot.The channel service ensures that the userid field within the activity has been set and the message is sent to the bot.

    Nota

    Los identificadores de usuario son específicos del canal como, por ejemplo, el identificador de Facebook del usuario o su número de teléfono para SMS.User ID's are channel specific, such as the user's Facebook ID or their SMS phone number.

  3. El bot realiza una solicitud al servicio de token de Bot Framework en la que pregunta si ya tiene un token para el identificador de usuario de la conexión de OAuth GraphConnection.The bot makes a request to the Bot Framework Token Service asking if it already has a token for the UserId for the OAuth connection GraphConnection.

  4. Puesto que es la primera vez que este usuario ha interactuado con el bot, el servicio de token de Bot Framework no tiene todavía ningún token para este usuario y devuelve un resultado NotFound al bot.Since this is the first time this user has interacted with the bot, the Bot Framework Token Service does not yet have a token for this user, and returns a NotFound result to the bot.

    Nota

    Si se encuentra el token, se omiten los pasos de autenticación y el bot puede realizar la solicitud de correo electrónico con el token almacenado.If the token is found, the authentication steps are skipped and the bot can make the email request using the stored token.

  5. El bot crea una tarjeta OAuthCard con el nombre de conexión GraphConnection y responde al usuario pidiéndole que inicie sesión con esta tarjeta.The bot creates an OAuthCard with a connection name of GraphConnection and replies to the user asking to sign-in using this card.

  6. La actividad pasa a través del servicio de canal de Bot Framework, que llama al servicio de token de Bot Framework para crear una dirección URL de inicio de sesión de OAuth válida para esta solicitud.The activity passes through the Bot Framework Channel Service, which calls into the Bot Framework Token Service to create a valid OAuth sign-in URL for this request. Esta dirección URL de inicio de sesión se agrega a OAuthCard y la tarjeta se devuelve al usuario.This sign-in URL is added to the OAuthCard and the card is returned to the user.

  7. Al usuario se le presenta un mensaje para que inicie sesión haciendo clic en el botón Iniciar sesión de OAuthCard.The user is presented with a message to sign-in by clicking on the OAuthCard's sign-in button.

  8. Cuando el usuario hace clic en el botón de inicio de sesión, el servicio de canal abre un explorador web y llama al servicio externo para que cargue su página de inicio de sesión.When the user clicks the sign-in button, the channel service opens a web browser and calls out to the external service to load its sign-in page.

  9. El usuario inicia sesión en esta página para el servicio externo.The user signs-in to this page for the external service. A continuación, el servicio externo completa el intercambio del protocolo OAuth con el servicio de token de Bot Framework, lo que hace que el servicio externo envíe al servicio de token de Bot Framework el token del usuario.Then the external service completes the OAuth protocol exchange with the Bot Framework Token Service, resulting in the external service sending the Bot Framework Token Service the user token. El servicio de token de Bot Framework almacena de forma segura este token y envía una actividad al bot con él.The Bot Framework Token Service securely stores this token and sends an activity to the bot with this token.

  10. El bot recibe la actividad con el token y puede usarlo para realizar llamadas a MS Graph API.The bot receives the activity with the token and is able to use it to make calls against the MS Graph API.

Protección de la dirección URL de inicio de sesiónSecuring the sign-in URL

Una consideración importante a tener en cuenta cuando Bot Framework facilita el inicio de sesión de un usuario es la protección de la dirección URL de inicio de sesión.An important consideration when the Bot Framework facilitates a user login is how to secure the sign-in URL. Cuando se presenta a un usuario una dirección URL de inicio de sesión, esta se asocia a un identificador de conversación y de usuario específicos para ese bot.When a user is presented with a sign-in URL, this URL is associated with a specific conversation ID and user ID for that bot. Esta dirección URL no debe compartirse ya que, de hacerlo, podría provocar un inicio de sesión incorrecto para una determinada conversación del bot.This URL should not be shared, as it would cause the wrong sign-in to occur for a particular bot conversation. Para mitigar los ataques de seguridad relacionados con el uso compartido de la dirección URL de inicio de sesión, es necesario asegurarse de que la máquina y la persona que hace clic en la dirección URL de inicio de sesión es la persona que posee la ventana de la conversación.To mitigate security attacks regarding sharing the sign-in URL, it is necessary to ensure that the machine and person who clicks on the sign-in URL is the person who owns the conversation window.

Algunos canales como Microsoft Teams, Direct Line y WebChat pueden hacerlo sin que el usuario lo haga.Some channels such as Microsoft Teams, Direct Line, and WebChat are able to do this without the user noticing. Por ejemplo, WebChat utiliza cookies de sesión para asegurarse de que el flujo de inicio de sesión tuvo lugar en el mismo explorador que la conversación de WebChat.For example, WebChat uses session cookies to ensure that the sign-in flow took place in the same browser as the WebChat conversation. Sin embargo, en el caso de otros canales, al usuario se le presenta a menudo un código mágico de 6 dígitos.However, for other channels the user is often presented with a 6-digit magic code. Esto se parece a la autenticación multifactor integrada ya que el servicio de token de Bot Framework no publicará el token para el bot a menos que el usuario termine la autenticación final y demuestre que la persona que ha iniciado sesión tiene acceso a la experiencia de chat escribiendo el código de 6 dígitos.This is similar to a built-in multi-factor authentication, as the Bot Framework Token Service will not release the token to the bot unless the user finishes the final authentication, proving that the person who signed-in has access to the chat experience by entering the 6-digit code.

Importante

Tenga en cuenta estas consideraciones de seguridad importantes.Please, keep in mind these important Security considerations. Puede encontrar información adicional en esta entrada de blog: Uso de WebChat con la autenticación de Azure Bot Service.You can find additional information in this blog post: Using WebChat with Azure Bot Service Authentication.

Pasos siguientesNext steps

Ahora que conoce la autenticación de usuario, echemos un vistazo a cómo aplicarlo al bot.Now that you know about user authentication, let's take a look at how to apply that to your bot.

Consulte tambiénSee also