Direct Line 增強驗證
適用於: SDK v4
本文說明用戶連線到 Bot 時的潛在安全性風險,例如使用 網路聊天 控件。 此外,它也會顯示使用 Direct Line 增強驗證設定和保護使用者標識碼處理的緩和解決方案。
有兩個使用者身分識別:
模擬
仿真是指讓 Bot 認為自己是其他人的攻擊者動作。 例如,在 網路聊天 中,攻擊者可以藉由變更 網路聊天 實例的使用者標識碼來模擬其他人。
模擬風險降低
讓使用者識別碼 無法辨解。
啟用 Direct Line 通道的 增強驗證 選項,以允許 Azure AI Bot 服務進一步偵測和拒絕任何使用者識別碼變更。 這表示從 Direct Line 到 Bot 的訊息上的使用者識別碼一
Activity.From.Id
律會與您用來初始化 網路聊天 控件的使用者識別元相同。注意
Direct Line 會根據 Direct Line 秘密建立 令牌 ,並將內嵌
User.Id
在令牌中。 它會確保傳送至 Bot 的From.Id
訊息具有User.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 資源。
使用者身分識別詐騙風險降低
在 網路聊天 控件中,有兩種機制可確保適當的使用者已登入。
Magic 程式代碼。 在登入程序結束時,使用者會看到隨機產生的6位數代碼(magiccode)。 用戶必須在交談中輸入此程序代碼,才能完成登入程式。 這可能會導致用戶體驗不佳。 此外,它很容易遭受網路釣魚攻擊;惡意使用者可以欺騙其他使用者登入並取得魔術程序代碼。
Direct Line 增強驗證。 使用 Direct Line 增強驗證來確保登入程式只能在與 網路聊天 用戶端相同的瀏覽器會話中完成。
若要啟用此保護,請使用 Direct Line 令牌啟動 網路聊天,其中包含可裝載 Bot 網路聊天 用戶端的信任網域清單。 使用增強的驗證選項,您可以在 [Direct Line 組態] 頁面中,以靜態方式指定受信任的網域 (受信任來源) 清單。 請參閱設定 增強式驗證 一節。