Udostępnij za pośrednictwem


Uwierzytelnianie rozszerzone direct line

DOTYCZY: ZESTAW SDK w wersji 4

W tym artykule opisano potencjalne zagrożenia bezpieczeństwa, gdy użytkownicy nawiązują połączenie z botem, na przykład przy użyciu kontroli czat internetowy. Ponadto pokazuje rozwiązania korygujące przy użyciu rozszerzonych ustawień uwierzytelniania direct line i bezpiecznej obsługi identyfikatora użytkownika.

Istnieją dwie tożsamości użytkowników:

  • Tożsamość użytkownika kanału. Osoba atakująca może jej użyć do personifikacji.
  • Tożsamość użytkownika od dostawcy tożsamości używanego przez bota do uwierzytelniania użytkownika. Osoba atakująca może jej używać do fałszowania tożsamości.

Personifikacja

Personifikacja odnosi się do akcji osoby atakującej, która sprawia, że bot myśli, że jest kimś innym. Na przykład w czat internetowy osoba atakująca może personifikować kogoś innego, zmieniając identyfikator użytkownika wystąpienia czat internetowy.

Środki zaradcze personifikacji

  • Wprowadź identyfikator użytkownika bez możliwości myślenia.

  • Połączenie bota do linii bezpośredniej.

  • Włącz rozszerzoną opcję uwierzytelniania kanału Direct Line, aby umożliwić usłudze Azure AI Bot Service dalsze wykrywanie i odrzucanie zmian identyfikatora użytkownika. Oznacza to, że identyfikator użytkownika (Activity.From.Id) w komunikatach z wiersza bezpośredniego do bota będzie zawsze taki sam jak identyfikator użytkownika użyty do zainicjowania kontrolki czat internetowy.

    Uwaga

    Direct Line tworzy token na podstawie wpisu tajnego direct line i osadza User.Id element w tokenie. Zapewnia, że komunikaty wysyłane do bota mają te User.Id wiadomości jako działanie From.Id. Jeśli klient wysyła komunikat do usługi Direct Line o innej From.Idwartości , zostanie on zmieniony na identyfikator osadzony w tokenie przed przekazaniem komunikatu do bota. Nie można więc użyć innego identyfikatora użytkownika po zainicjowaniu wpisu tajnego kanału przy użyciu tego identyfikatora.

    Ta funkcja wymaga, aby identyfikator użytkownika rozpoczął się od dl_ , jak pokazano poniżej.

    Napiwek

    W przypadku bota regionalnego ustaw wartość dlUrl zgodnie z wybranym regionem.
    W przypadku wybrania europy ustaw wartość "https://europe.directline.botframework.com/v3/directline/tokens/generate".
    W przypadku wybrania indii ustaw wartość "https://india.directline.botframework.com/v3/directline/tokens/generate".
    Aby uzyskać więcej informacji na temat regionalnych botów, zobacz Regionalizacja w usłudze Azure AI Bot Service.

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

    Wygenerowany token oparty na wpisie tajnym direct line jest następnie używany w kontrolce czat internetowy, jak pokazano poniżej:

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

Fałszowanie tożsamości

Fałszowanie tożsamości odnosi się do akcji osoby atakującej, która zakłada tożsamość uprawnionego użytkownika, a następnie używa tej tożsamości do osiągnięcia złośliwego celu.

Gdy bot prosi użytkownika kanału A o zalogowanie się do dostawcy tożsamości, proces logowania musi zapewnić, że użytkownik A jest jedynym użytkownikiem, który loguje się do dostawcy. Jeśli inny użytkownik może również zalogować się do dostawcy, będzie miał dostęp do zasobów A użytkownika za pośrednictwem bota.

Ograniczanie ryzyka fałszowania tożsamości użytkownika

W kontrolce czat internetowy istnieją dwa mechanizmy zapewniające, że właściwy użytkownik jest zalogowany.

  1. Kod magiczny. Na końcu procesu logowania użytkownik jest wyświetlany losowo wygenerowany 6-cyfrowy kod (kod magiczny). Aby ukończyć proces logowania, użytkownik musi wpisać ten kod w konwersacji. Ma to tendencję do złego środowiska użytkownika. Ponadto jest podatna na ataki wyłudzane informacje; złośliwy użytkownik może nakłonić innego użytkownika do logowania się i uzyskać kod magiczny.

  2. Rozszerzone uwierzytelnianie w wierszu bezpośrednim. Użyj rozszerzonego uwierzytelniania direct line, aby zagwarantować, że proces logowania można ukończyć tylko w tej samej sesji przeglądarki co klient czat internetowy.

    Aby włączyć tę ochronę, uruchom czat internetowy przy użyciu tokenu direct line zawierającego listę zaufanych domen, które mogą hostować klienta czat internetowy bota. Dzięki rozszerzonym opcjom uwierzytelniania można statycznie określić listę zaufanych domen (zaufanych źródeł) na stronie konfiguracji linii bezpośredniej. Zobacz sekcję Konfigurowanie rozszerzonego uwierzytelniania .