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


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

ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4

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

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

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

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

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

Устранение олицетворения

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

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

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

    Примечание.

    Direct Line создает маркер на основе секрета Direct Line и внедряет User.Id его в маркер. Это гарантирует, что сообщения, отправленные боту, имеют это как User.Id действие From.Id. Если клиент отправляет сообщение в Direct Line с другим From.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 пользователя через бот.

Устранение спуфингов удостоверения пользователя

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

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

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

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