你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Direct Line 增强身份验证
适用于: SDK v4
本文介绍了用户(例如)使用网络聊天控件连接到机器人时的潜在安全风险。 此外,它还演示了使用 Direct Line 增强身份验证设置和安全用户 ID 处理方式的缓解解决方案。
有两个用户标识:
模拟
模拟是指让机器人认为自己是其他人的攻击者的操作。 例如,在网上聊天中,攻击者可能会通过更改网上聊天实例的用户 ID 来模拟其他某人。
模拟缓解操作
使用不可猜出的用户 ID。
启用 Direct Line 通道的增强身份验证选项,以允许 Azure AI 机器人服务进一步检测和拒绝任何用户 ID 更改。 这意味着,从 Direct Line 发送到机器人的消息中的用户 ID (
Activity.From.Id
) 将始终与用于初始化网上聊天控件的用户 ID 相同。注意
Direct Line 基于 Direct Line 机密创建令牌,并将令牌嵌入
User.Id
到令牌中。 它确保发送到机器人的消息具有User.Id
作为活动From.Id
的消息。 如果客户端将消息发送到 Direct Line 具有其他From.Id
消息,则会在将消息转发到机器人之前,该消息将更改为 令牌 中嵌入的 ID。 因此,在使用该 ID 初始化通道机密后,不能使用其他用户 ID。此功能要求用户 ID 以如下所示开头
dl_
。提示
对于区域机器人,请根据所选区域进行设置
dlUrl
。
如果选择了欧洲,则设置“https://europe.directline.botframework.com/v3/directline/tokens/generate"”。
如果选择印度,请设置“https://india.directline.botframework.com/v3/directline/tokens/generate"。
有关区域机器人的详细信息,请参阅 Azure AI 机器人服务中的区域化。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 机密生成的令牌在Web 聊天控件中使用,如下所示:
@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 是唯一登录提供程序的用户 A。 如果还允许其他用户登录提供程序,他们将有权通过机器人访问用户 A 资源。
用户标识欺骗缓解
在 Web 聊天控件中,有两种机制可以确保正确的用户登录。
魔码。 在登录过程结束时,用户会看到一个随机生成的 6 位数代码(魔码)。 用户必须在聊天中键入此代码才能完成登录过程。 这往往会导致用户体验不佳。 此外,它容易受到网络钓鱼攻击;恶意用户可以欺骗其他用户登录并获取 magic 代码。
Direct Line 增强身份验证。 使用 Direct Line 增强的身份验证可以保证登录过程只能在与 Web 聊天 客户端相同的浏览器会话中完成。
若要启用此保护,请使用包含可托管机器人Web 聊天客户端的受信任域列表的 Direct Line 令牌开始Web 聊天。 使用增强的身份验证选项,可以在 Direct Line 配置页中静态指定受信任的域(受信任的源)列表。 请参阅“ 配置增强身份验证 ”部分。