共用方式為


Direct Line 增強驗證

適用於: SDK v4

本文說明用戶連線到 Bot 時的潛在安全性風險,例如使用 網路聊天 控制件。 此外,它也會顯示使用 Direct Line 增強驗證設定 和保護 使用者標識碼 處理的緩和解決方案。

有兩個使用者身分識別:

  • 通道使用者的身份。 攻擊者可以使用它進行 模擬
  • Bot 用來驗證使用者的身分識別提供者所提供的該使用者的身分。 攻擊者可以使用它進行 身分識別詐騙

模仿

冒充是指攻擊者執行的動作,使 Bot 誤以為他們是其他人。 例如,在網路聊天中,攻擊者可以藉由變更網路聊天實例 的使用者標識碼 來模擬其他人。

冒充風險緩解

  • 讓使用者識別碼 無法辨解

  • 將 Bot 連線到 Direct Line

  • 啟用 Direct Line 通道的 增強驗證 選項,以允許 Azure AI Bot 服務進一步偵測和拒絕任何使用者識別碼變更。 這表示從 Direct Line 到 Bot 的訊息上,使用者識別碼 (Activity.From.Id) 一律與您用來初始化網路聊天控制件的使用者識別碼相同。

    備註

    Direct Line 會根據 Direct Line 秘密建立 令牌 ,並將內嵌 User.Id 在令牌中。 它會確保傳送至 Bot 的訊息中,User.Id 被用作活動的 From.Id。 如果用戶端將訊息傳送至具有不同 From.Id的 Direct Line,則會在將訊息轉送至 Bot 之前,將它變更為 內嵌在令牌中的 標識碼。 因此,在使用該使用者識別碼初始化信道私密之後,您無法使用其他使用者識別碼。

    此功能需要使用者標識碼以 開頭 dl_ ,如下所示。

    小提示

    針對區域 Bot,請根據選取的區域進行設定 dlUrl
    如果選取了歐洲,請設定 “https://europe.directline.botframework.com/v3/directline/tokens/generate"。
    如果選取印度,請設定 “https://india.directline.botframework.com/v3/directline/tokens/generate"。
    如需區域 Bot 的詳細資訊,請參閱 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);
        }
    }    
    
    

    產生的令牌會根據 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>
    
    

身分偽造

身分識別詐騙是指攻擊者的動作,該攻擊者假設合法使用者的身分識別,然後使用該身分識別來完成惡意目標。

當 Bot 要求通道使用者 A 登入識別提供者時,登入程式必須確保使用者 A 是唯一登入提供者的使用者。 如果另一位使用者也允許登入提供者,他們就能透過 Bot 存取使用者 A 資源。

使用者身分冒充防範措施

在網路聊天控制件中,有兩種機制可確保適當的使用者已登入。

  1. Magic Code。 在登入程序結束時,使用者會看到隨機產生的6位數代碼(magiccode)。 用戶必須在交談中輸入此程序代碼,才能完成登入程式。 這可能會導致用戶體驗不佳。 此外,它很容易遭受網路釣魚攻擊;惡意使用者可以欺騙其他使用者登入並取得魔術程序代碼。

  2. Direct Line 增強驗證。 使用 Direct Line 增強驗證來確保登入程式只能在與網路聊天用戶端 相同的瀏覽器會話 中完成。

    若要啟用此保護,請使用 Direct Line 令牌啟動網路聊天,其中包含 可裝載 Bot 網路聊天用戶端的信任網域清單。 使用增強的驗證選項,您可以在 [Direct Line 組態] 頁面中,以靜態方式指定受信任的網域 (受信任來源) 清單。 請參閱 設定增強式驗證 一節。