Autenticación mejorada de línea directaDirect Line enhanced authentication

se aplica a: SDK V4APPLIES TO: SDK v4

En este artículo se describen los posibles riesgos de seguridad cuando los usuarios se conectan a un bot, por ejemplo, mediante el control de chat web .This article describes potential security risks when users connect to a bot, for example using the Web Chat control. Además, se muestra la mitigación de soluciones con la configuración de autenticación mejorada de línea directa y el control de ID. de usuario seguro.Also, it shows mitigating solutions using the Direct Line enhanced authentication settings and secure user ID handling.

Debe tener en cuenta que hay dos identidades de usuario:You must be aware that there are two user identities:

  • La identidad del usuario del canal.The channel user's identity. Un atacante puede utilizarlo para la suplantación.An attacker can use it for Impersonation.
  • La identidad del usuario del proveedor de identidades que usa el bot para autenticar al usuario.The user's identity from the identity provider that the bot uses to authenticate the user. Un atacante puede utilizarlo para la suplantación de identidad.An attacker can use it for Identity spoofing.

SuplantaciónImpersonation

La suplantación se refiere a la acción de un atacante que hace que el bot cree que es otra persona.Impersonation refers to the action of an attacker that makes the bot think he is someone else. Por ejemplo, en el chat Web, el atacante puede suplantar a otra persona cambiando el ID . de usuario de la instancia de chat Web.For example, in Web Chat, the attacker can impersonate someone else by changing the user ID of the Web Chat instance.

Mitigación de suplantaciónImpersonation mitigation

  • Haga que el ID. de usuario no se pueda adivinar.Make the user ID unguessable.

  • Conecte un bot a la línea directa.Connect a bot to Direct Line.

  • Habilite la opción de autenticación mejorada del canal de línea directa para permitir que el Azure bot Service pueda detectar y rechazar cualquier cambio de ID. de usuario.Enable the Direct Line channel's enhanced authentication option to allow the Azure Bot Service to further detect and reject any user ID change. Esto significa que el identificador de usuario ( Activity.From.Id ) de los mensajes de línea directa al bot siempre será el mismo que el que se usó para inicializar el control de chat Web.This means the user ID (Activity.From.Id) on messages from Direct Line to the bot will always be the same as the one you used to initialize the Web Chat control.

    Nota

    Línea directa crea un token basado en el secreto de línea directa e inserta el User.ID en el token.Direct Line creates a token based on the Direct Line secret and embeds the User.Id in the token. Garantiza que los mensajes enviados al bot tienen que User.ID como from.ID de la actividad. Si un cliente envía un mensaje a una línea directa con un from.ID diferente, se cambiará al identificador insertado en el token antes de reenviar el mensaje al bot.It assures that the messages sent to the bot have that User.Id as the activity's From.Id. If a client sends a message to Direct Line having a different From.Id, it will be changed to the Id embedded in the token before forwarding the message to the bot. Por lo tanto, no puede usar otro ID. de usuario después de inicializar un secreto de canal con ese identificador.So you cannot use another user ID after a channel secret is initialized with that ID.

    Esta característica requiere que el ID. de usuario comience con dl_ , como se muestra a continuación:This feature requires the user ID to start with dl_ as shown below:

    public class HomeController : Controller
    {
        private const string secret = "<TODO: DirectLine secret>";
        private const string dlUrl = "https://directline.botframework.com/v3/directline/tokens/generate";
    
        public async Task<ActionResult> Index()
        {
            HttpClient client = new HttpClient();
            var userId = $"dl_{Guid.NewGuid()}";
    
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, dlUrl);
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
            request.Content = new StringContent(
                JsonConvert.SerializeObject(
                    new { User = new { Id = userId } }),
                    Encoding.UTF8,
                    "application/json");
    
            var response = await client.SendAsync(request);
    
            string token = String.Empty;
            if (response.IsSuccessStatusCode)
            {
                var body = await response.Content.ReadAsStringAsync();
                token = JsonConvert.DeserializeObject<DirectLineToken>(body).token;
            }
    
            var config = new ChatConfig()
            {
                Token = token,
                UserId = userId
            };
    
            return View(config);
        }
    }    
    
    

    El token generado, basado en el secreto de línea directa, se usa en el control de chat web como se muestra a continuación:The generated token, based on the Direct Line secret, is then used in the Web Chat control as shown below:

    @model Bot_Auth_DL_Secure_Site_MVC.Models.ChatConfig
    @{
        ViewData["Title"] = "Home Page";
    }
    <div id="webchat" role="main" />
    <head>
        <script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
    </head>
    <body>
        <script>
          window.WebChat.renderWebChat({
              directLine: window.WebChat.createDirectLine({ token: '@Model.Token' }),
                userID: '@Model.UserId'
          }, document.getElementById('webchat'));
        </script>
    </body>
    
    

Suplantación de identidadIdentity spoofing

La suplantación de identidad se refiere a la acción de un atacante que asume la identidad de un usuario legítimo y, a continuación, utiliza esa identidad para lograr un objetivo malintencionado.Identity spoofing refers to the action of an attacker that assumes the identity of a legitimate user and then uses that identity to accomplish a malicious goal.

Cuando un bot solicita al usuario del canal que inicie sesión en un proveedor de identidades, el proceso de inicio de sesión debe asegurarse de que el usuario A es el único que inicia sesión en el proveedor.When a bot asks the channel user A to sign-in to an identity provider, the sign-in process must assure that user A is the only one that signs into the provider. Si otro usuario también tiene permiso para iniciar sesión en el proveedor, tendría acceso a los recursos de los usuarios a través del bot.If another user is also allowed to sign-in the provider, they would have access to user A resources through the bot.

Mitigación de suplantación de identidad de usuarioUser identity spoofing mitigation

En el control de chat Web, hay dos mecanismos para asegurarse de que el usuario adecuado inicia sesión.In the Web Chat control, there are two mechanisms to assure that the proper user is signed in.

  1. Código mágico.Magic code. Al final del proceso de inicio de sesión, se presenta al usuario un código de 6 dígitos generado aleatoriamente (código mágico).At the end of the sign-in process, the user is presented with a randomly generated 6-digit code (magic code). El usuario debe escribir este código en la conversación para completar el proceso de inicio de sesión.The user must type this code in the conversation to complete the sign-in process. Esto suele dar lugar a una experiencia de usuario incorrecta.This tends to result in a bad user's experience. Además, aún así se corría el riesgo de sufrir ataques de suplantación de identidad (phishing).Additionally, it is still susceptible to phishing attacks. Un usuario malintencionado puede engañar a otro usuario para que inicie sesión y obtenga el código mágico mediante la suplantación de identidad (phishing).A malicious user can trick another user to sign-in and obtain the magic code through phishing.

    Advertencia

    El uso del código mágico está en desuso.The use of the magic code has been deprecated. En su lugar, se recomienda usar el enfoque de autenticación mejorada de línea directa , que se describe a continuación.Instead, it's recommended to use the Direct Line enhanced authentication approach, described below.

  2. Autenticación mejorada de línea directa.Direct Line enhanced authentication. Debido a los problemas con el enfoque de código mágico , Azure bot Service eliminó sus necesidades.Because of the issues with the magic code approach, Azure Bot Service removed its need. Azure Bot Service garantiza que el proceso de inicio de sesión solo se puede completar en la misma sesión del explorador que el propio Web Chat.Azure Bot Service guarantees that the sign-in process can only be completed in the same browser session as the Web Chat itself. Para habilitar esta protección, debe iniciar el chat web con un token de línea directa que contenga una lista de dominios de confianza que pueden hospedar el cliente de chat web del bot.To enable this protection, you must start Web Chat with a Direct Line token that contains a list of trusted domains that can host the bot's Web Chat client. Con las opciones de autenticación mejorada, puede especificar de forma estática la lista dominios de confianza (orígenes de confianza) en la página Configuración de línea directa.With enhanced authentication options, you can statically specify the trusted domains (trusted origins) list in the Direct Line configuration page. Consulte la sección configuración de la autenticación mejorada .See Configure enhanced authentication section.