你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

身份验证类型

适用于: SDK v4

在 Bot Framework 中,存在两个广泛的身份验证类别: 机器人身份验证用户身份验证。 每个令牌都有一个关联 的令牌 ,用于允许访问受保护的资源。 下图显示了机器人和用户身份验证中涉及的元素。

bot framework authentication context

在下图中:

  • 主机平台 是机器人托管平台。 它可以是 Azure 或所选的任何主机平台。
  • 机器人连接器服务 可促进机器人与通道之间的通信。 它将从通道接收的消息转换为活动对象,并将其发送到机器人的消息传送终结点。 同样,它会将从机器人收到的活动对象转换为通道理解的消息,并将其发送到通道。
  • 机器人适配器。 这是默认的 Bot Framework 适配器。 它执行以下任务:
    • 将 JSON 有效负载转换为对象。 此时,由于 Bot Connector 服务,它已是一个活动对象。
    • 创建轮次上下文并将活动对象添加到其中。
    • 运行中间件(如果有)。
    • 将轮次上下文转发到机器人。

注意

使用自定义通道适配器时,适配器本身会执行 Bot Connector 服务和默认机器人适配器执行的任务。 此外,它还提供相关 Web 挂钩 API 的身份验证机制。 有关示例,请参阅 使用 Slack 适配器将机器人连接到 Slack

机器人身份验证

机器人由其 MicrosoftAppIDMicrosoftAppPassword 标识,它们保留在机器人的设置文件中, (appsettings.json (.NET) 、 .env (JavaScript) 、 config.py (Python) ) 或 Azure 密钥保管库 中。 有关详细信息,请参阅 MicrosoftAppID 和 MicrosoftAppPassword

在Azure 门户中注册机器人时,Azure 会创建一个 Active Directory (Azure AD) 注册应用程序。 如果使用 Bot Framework CLI,则必须专门执行一个步骤来创建 Azure AD 注册。 此注册具有应用程序 ID () MicrosoftAppID 和客户端机密 (MicrosoftAppPassword) 。 Azure 使用这些值生成一个 令牌 ,机器人可以使用该令牌访问安全资源。

当通道通过 Bot Connector 服务向机器人发送请求时,它会在请求的授权标头中指定令。 机器人通过验证令牌的真实性,对来自 Bot Connector 服务的调用进行身份验证。

当机器人通过 Bot Connector 服务向通道发送请求时,它必须在请求的授权标头中指定令。 所有请求必须包括由 Bot Connector 服务验证的访问令牌,以授权请求。

描述的操作由 Bot Framework SDK 自动执行。

有关更多详细信息,请参阅 REST API 文档,了解如何对 机器人连接器服务中的请求进行身份验证, 以及如何对 机器人向 Bot Connector 服务发出的请求进行身份验证

渠道

通常,通道通过 Bot Connector 服务与机器人通信。 这意味着,以前的身份验证原则通常适用。 你可能想要注意到特定通道的特征。

Direct Line

除了标准支持的通道外,客户端应用程序还可以使用Direct Line通道与机器人通信。

客户端应用程序使用从Azure 门户中的Direct Line通道配置页获取的机密,或者使用在运行时获取的令牌,对请求Direct Line (版本 3.0) 进行身份验证。 机密或令牌在每个请求的授权标头中指定。

重要

将 Azure 机器人服务身份验证与Web 聊天一起使用时,必须注意一些重要的安全注意事项。 有关详细信息,请参阅 REST 身份验证文章中 的安全注意 事项部分。

有关详细信息,请参阅 “隐藏机密”、“交换机密以获取令牌”,并生成嵌入内容。

Web 聊天

Web 聊天有两个实现:通道控件

  • 向 Azure 注册机器人时,会自动将Web 聊天通道配置为允许测试机器人。

    bot web chat testing.

    有关详细信息,请参阅将机器人连接到Web 聊天

  • 可以将Web 聊天控件与Direct Line通道配合使用,以提供对客户端应用程序中机器人的访问权限。 有关控件的详细信息,请参阅 Bot Framework Web 聊天

技能

技能和技能使用者是两个不同的机器人,每个机器人都有自己的应用 ID 和密码。

  • 使用者可以将用户活动转发到技能,并将技能的响应转发给用户。
  • 在技能中,技能使用者充当通道。 使用者有一个技能主机终结点,充当技能将活动发送到的服务 URL。
  • 有关技能的详细信息,请参阅 技能概述

服务级身份验证由 Bot Connector 服务管理。 框架使用持有者令牌和机器人应用程序 ID 来验证每个机器人的标识。

重要

这要求所有机器人 (技能使用者及其使用的任何技能) 具有有效的应用程序凭据。

声明验证

除了这种基本的身份验证级别外,还必须向技能和技能使用者的身份验证配置添加 声明验证器 。 声明在身份验证标头之后进行评估。 这允许每个机器人限制它将接受来自哪些其他机器人的活动。

有关示例声明验证,请参阅如何 实现技能实现技能使用者

Bot Framework Emulator

Bot Framework 模拟器有自己的身份验证流和自己的令牌。 模拟器有自己的通道和内置服务器。

用户身份验证

有时,机器人必须代表用户访问受保护的联机资源。 为此,必须授权机器人。 这是因为要执行某些操作,例如检查电子邮件、检查航班状态或下订单,机器人需要调用外部服务(如 Microsoft Graph、GitHub 或公司的 REST 服务)。 OAuth 用于对用户进行身份验证并授权机器人。

注意

机器人要访问用户的资源,需要执行两个宏步骤。

  1. 身份验证。 验证用户标识的过程。
  2. 授权。 验证机器人是否可以访问用户资源的过程。

如果第一步成功,则会颁发基于用户凭据的令牌。 在第二步中,机器人使用令牌访问用户的资源。

有关详细信息,请参阅 用户身份验证

标识提供者

标识提供者对用户或客户端标识进行身份验证,并颁发易耗安全令牌。 它提供用户身份验证即服务。 客户端应用程序(如 Web 应用程序)将身份验证委托给受信任的标识提供者。

机器人可以使用受信任的标识提供者执行以下操作:

  • 启用单一登录 (SSO) 功能,使其能够访问多个受保护的资源。
  • 代表用户连接到云计算资源,减少了用户重新进行身份验证的需求。

注意

机器人身份验证期间颁发的令牌与用户身份验证期间颁发的令牌不同。 第一个用于在机器人、通道和客户端应用程序之间建立安全通信。 第二个用于授权机器人代表用户访问受保护的资源。

请注意,通道提供自己的单独用户身份验证,让用户登录到通道。

有关机器人如何使用标识提供者代表用户访问资源的详细信息,请参阅 标识提供 者。