Расширенная проверка подлинности Direct Line
ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4
В этой статье описываются потенциальные риски безопасности при подключении пользователей к боту, например с помощью элемента управления Веб-чат. Кроме того, в нем показаны решения по устранению неполадок с помощью параметров расширенной проверки подлинности 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 пользователя через бот.
Устранение спуфингов удостоверения пользователя
В элементе управления Веб-чат существует два механизма обеспечения входа соответствующего пользователя.
Волшебный код. В конце процесса входа пользователь будет представлен случайным образом созданный 6-значный код (волшебный код). Пользователь должен ввести этот код в беседе, чтобы завершить процесс входа. Это, как правило, приводит к плохому интерфейсу пользователя. Кроме того, он подвержен фишинговым атакам; Злоумышленник может обмануть другого пользователя для входа и получения магического кода.
Расширенная проверка подлинности Direct Line. Используйте расширенную проверку подлинности Direct Line, чтобы гарантировать, что процесс входа можно выполнить только в том же сеансе браузера, что и клиент Веб-чат.
Чтобы включить эту защиту, запустите Веб-чат с маркером Direct Line, который содержит список доверенных доменов, которые могут размещать Веб-чат клиента бота. С помощью расширенных параметров проверки подлинности можно статически указать список доверенных доменов (доверенных источников) на странице конфигурации Direct Line. См. раздел "Настройка расширенной проверки подлинности ".