Sdílet prostřednictvím


Rozšířené ověřování direct line

PLATÍ PRO: SDK v4

Tento článek popisuje potenciální bezpečnostní rizika, když se uživatelé připojují k robotovi, například pomocí ovládacího prvku Webový chat. Ukazuje také zmírnění řešení pomocí nastavení rozšířeného ověřování direct line a zabezpečeného zpracování ID uživatele.

Existují dvě identity uživatelů:

  • Identita uživatele kanálu. Útočník ho může použít k zosobnění.
  • Identita uživatele od zprostředkovatele identity, který robot používá k ověření uživatele. Útočník ho může použít k falšování identity.

Zosobnění

Zosobnění odkazuje na akci útočníka, který robota považuje za někoho jiného. Například v Webový chat může útočník zosobnit někoho jiného změnou ID uživatele instance Webový chat.

Zmírnění rizik zosobnění

  • Nastavení ID uživatele jako nepřesné.

  • Připojení robota na Direct Line.

  • Povolte možnost rozšířeného ověřování kanálu Direct Line, aby služba Azure AI Bot Service mohla dále zjišťovat a odmítat všechny změny ID uživatele. To znamená, že ID uživatele (Activity.From.Id) u zpráv z přímého řádku do robota bude vždy stejné jako ID uživatele, které jste použili k inicializaci ovládacího prvku Webový chat.

    Poznámka:

    Direct Line vytvoří token založený na tajném kódu Direct Line a vloží ho User.Id do tokenu. Zajišťuje, že zprávy odeslané robotovi mají jako User.Id aktivitu From.Id. Pokud klient odešle zprávu do direct line s jiným From.Idkódem , změní se na ID vložené v tokenu před předáním zprávy robotovi. Takže po inicializaci tajného kódu kanálu s tímto ID nemůžete použít jiné ID uživatele.

    Tato funkce vyžaduje, aby ID uživatele začínalo dl_ , jak je znázorněno níže.

    Tip

    Pro místního robota nastavte dlUrl podle vybrané oblasti.
    Pokud je vybrána evropa, nastavte "https://europe.directline.botframework.com/v3/directline/tokens/generate".
    Pokud je vybrána indie, nastavte "https://india.directline.botframework.com/v3/directline/tokens/generate".
    Další informace o regionálních robotech najdete v tématu Regionalizace ve službě 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);
        }
    }    
    
    

    Vygenerovaný token založený na tajném kódu Direct Line se pak použije v ovládacím prvku Webový chat, jak je znázorněno níže:

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

Falšování identity

Falšování identity odkazuje na akci útočníka, který předpokládá identitu legitimního uživatele a pak ji použije k dosažení škodlivého cíle.

Když robot požádá uživatele kanálu A, aby se přihlásil ke zprostředkovateli identity, musí proces přihlašování zajistit, že uživatel A je jediný uživatel, který se přihlásí ke zprostředkovateli. Pokud se k poskytovateli může přihlásit i jiný uživatel, bude mít přístup k prostředkům uživatele A prostřednictvím robota.

Zmírnění falšování identity uživatele

V ovládacím prvku Webový chat existují dva mechanismy, které zajistí, že je správný uživatel přihlášený.

  1. Magický kód. Na konci procesu přihlášení se uživateli zobrazí náhodně vygenerovaný 6místný kód (magický kód). Aby uživatel dokončil proces přihlášení, musí do konverzace zadat tento kód. To má tendenci vést k špatnému uživatelskému prostředí. Kromě toho je náchylný k útokům phishing; Uživatel se zlými úmysly může oklamat jiného uživatele, aby se přihlásil a získal magický kód.

  2. Rozšířené ověřování direct line. Pomocí rozšířeného ověřování Direct Line můžete zaručit, že proces přihlášení je možné dokončit pouze ve stejné relaci prohlížeče jako klient Webový chat.

    Pokud chcete tuto ochranu povolit, spusťte Webový chat pomocí tokenu Direct Line, který obsahuje seznam důvěryhodných domén, které můžou hostovat klienta Webový chat robota. S rozšířenými možnostmi ověřování můžete staticky zadat seznam důvěryhodných domén (důvěryhodných zdrojů) na stránce konfigurace přímého řádku. Viz část Konfigurace rozšířeného ověřování .