Поделиться через


Расширенная проверка подлинности для Direct Line

ПРИМЕНИМО К: пакет SDK версии 4

В этой статье описываются потенциальные риски безопасности при подключении пользователей к боту, например с помощью элемента управления "Веб-чат ". Кроме того, в нем показаны решения по устранению неполадок с помощью параметров расширенной проверки подлинности Direct Line и безопасной обработки идентификаторов пользователя .

Существует два удостоверения пользователя:

  • Идентичность пользователя канала. Злоумышленник может использовать его для олицетворения.
  • Идентификация пользователя, предоставляемая поставщиком идентификации, который используется ботом для аутентификации пользователя. Злоумышленник может использовать его для подделки личности.

Олицетворение

Олицетворение относится к действиям злоумышленника, который заставляет бота думать, что они кто-то другой. Например, в веб-чате злоумышленник может олицетворить другого пользователя, изменив идентификатор пользователя экземпляра веб-чата.

Уменьшение риска выдачи себя за другого

  • Сделайте идентификатор пользователя недоступным.

  • Подключите бота к Direct Line.

  • Включите расширенный параметр проверки подлинности канала Direct Line, чтобы разрешить службе Azure AI Bot дополнительно обнаруживать и отклонять любые изменения идентификатора пользователя. Это означает, что идентификатор пользователя (Activity.From.Id) для сообщений из Direct Line в бот всегда будет совпадать с тем, который использовался для инициализации элемента управления "Веб-чат".

    Замечание

    Direct Line создает токен на основе секрета Direct Line и внедряет User.Id его в токен. Это гарантирует, что сообщения, отправленные боту, имеют User.Id в качестве From.Id активности. Если клиент отправляет сообщение в Direct Line с другим From.Id, он будет изменен на ID, встроенный в токен, прежде чем сообщение будет переадресовано боту. Поэтому вы не можете использовать другой идентификатор пользователя после инициализации секрета канала с этим идентификатором.

    Эта функция требует, чтобы идентификатор пользователя начинался с dl_, как показано ниже.

    Подсказка

    Для регионального бота задайте dlUrl в соответствии с выбранным регионом.
    Если выбрана европа, задайте значение "https://europe.directline.botframework.com/v3/directline/tokens/generate".
    Если выбрана индия, задайте значение "https://india.directline.botframework.com/v3/directline/tokens/generate".
    Дополнительные сведения о региональных ботах см. в разделе "Регионизация" в службе Azure AI Bot.

    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);
        }
    }    
    
    

    Созданный токен, основанный на секрете Direct Line, затем используется в элементе управления Веб-чат, как показано ниже:

    @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>
    
    

Подмена удостоверений

Спуфинг личности относится к действию злоумышленника, который принимает личность легитимного пользователя и затем использует эту личность для достижения злонамеренной цели.

Когда бот просит пользователя канала A авторизоваться через поставщика удостоверений, процесс авторизации должен гарантировать, что пользователь A является единственным, кто авторизуется через этого поставщика. Если другому пользователю также разрешен вход через поставщика, у него будет доступ к ресурсам пользователя A через бота.

Смягчение подмены личности пользователя

В элементе управления "Веб-чат" есть два механизма обеспечения входа соответствующего пользователя.

  1. Волшебный код. В конце процесса входа пользователь будет представлен случайным образом созданный 6-значный код (волшебный код). Пользователь должен ввести этот код в беседе, чтобы завершить процесс входа. Это, как правило, приводит к плохому интерфейсу пользователя. Кроме того, он подвержен фишинговым атакам; Злоумышленник может обмануть другого пользователя для входа и получения магического кода.

  2. Расширенная проверка подлинности Direct Line. Используйте расширенную проверку подлинности Direct Line, чтобы гарантировать, что процесс входа можно выполнить только в том же сеансе браузера , что и клиент веб-чата.

    Чтобы включить эту защиту, запустите веб-чат с маркером Direct Line, который содержит список доверенных доменов, которые могут размещать клиент веб-чата бота. С помощью расширенных параметров проверки подлинности можно статически указать список доверенных доменов (доверенных источников) на странице конфигурации Direct Line. См. раздел "Настройка расширенной проверки подлинности ".