用户身份验证
适用于:SDK v4
有时,机器人必须代表用户访问受保护的联机资源,例如检查电子邮件、检查航班状态或下单。 用户必须授权机器人代表其这样做,并且为了给机器人授权,用户必须进行身份验证。 OAuth 用于对用户进行身份验证以及为机器人授权。 另请参阅身份验证类型。
若要更新 OAuth 知识,请参阅以下文章:
- 一篇不错的 OAuth 概述:比正式规范更容易遵循
- OAuth 规范
聊天中的用户身份验证
若要代表用户执行某些操作,例如查看电子邮件、引用日历、查看航班状态或者下单,机器人需要调用外部服务,例如 Microsoft Graph、GitHub 或某个公司的 REST 服务。 每项外部服务都有一种保护这些调用的方法。 若要发出这些请求,一种常规方法是使用用户令牌 (有时称为 JSON Web 令牌 (JWT)),以独一无二的方式标识该外部服务上的用户。
为了安全地调用外部服务,机器人必须要求用户登录,以便获取用户用于该服务的令牌。 许多服务支持通过 OAuth 或 OAuth2 协议检索令牌。
Azure AI 机器人服务提供专用“登录”卡和服务来处理 OAuth 协议和管理令牌生命周期。 机器人可以使用这些功能获取用户令牌。
“OAuth 连接”作为机器人配置的一部分注册到 Azure 中的 Azure AI 机器人服务资源。
连接包含要使用的标识提供者的相关信息、有效的 OAuth 客户端 ID 和机密、要启用的 OAuth 范围,以及该标识提供者需要的任何其他连接元数据。
在机器人的代码中,OAuth 连接用于用户登录和获取用户令牌。
下图显示了身份验证过程中涉及的元素。
关于 Bot Framework Token Service
Bot Framework Token Service 负责以下事项:
- 简化 OAuth 协议与各种外部服务的配合使用。
- 安全地存储特定机器人、通道、聊天和用户的令牌。
- 获取用户令牌。
提示
如果机器人的用户令牌过期,则机器人应该:
- 注销用户
- 重新启动登录流
例如,如果机器人可以使用 Microsoft Graph API 检查用户最近的电子邮件,则该机器人需要“标识提供者”提供的用户令牌(在这种情况下为 Microsoft Entra ID)。 在设计时,机器人开发人员会执行以下两个重要步骤:
- 通过 Azure 门户将 Microsoft Entra ID 应用程序(标识提供者)注册到 Bot Framework Token Service。
- 配置机器人的 OAuth 连接(例如
GraphConnection
)。
下图显示了使用 Microsoft Graph 服务发出电子邮件请求时,用户与机器人交互的时间顺序。
用户向机器人发送电子邮件请求。
系统会将包含此消息的活动从用户发送到 Bot Framework Channel Service。 此通道服务可确保活动中的
userid
字段已设置且消息会发送给机器人。注意
用户 ID 是针对特定通道的,例如他们的短信电话号码。
机器人向 Bot Framework Token Service 提交请求,询问其是否已经有与 OAuth 连接
GraphConnection
对应的 UserId 的令牌。由于这是该用户首次与机器人交互,Bot Framework Token Service 还没有该用户的令牌,因此为机器人返回 NotFound 结果。
注意
如果找到令牌,则会跳过身份验证步骤,由机器人使用存储的令牌发出电子邮件请求。
机器人创建连接名称为
GraphConnection
的 OAuthCard 并回复用户,要求其使用该卡登录。活动会传经 Bot Framework Channel Service,后者会调用 Bot Framework Token Service,为该请求创建有效的 OAuth 登录 URL。 此 URL 会添加到 OAuthCard 中,该卡会返回给用户。
系统会向用户显示一条消息,要求其通过单击 OAuthCard 的登录按钮来登录。
当用户单击登录按钮时,通道服务会打开 Web 浏览器,并调用外部服务来加载其登录页。
用户登录到外部服务的该页面。 然后,外部服务就完成了与 Bot Framework Token Service 的 OAuth 协议交换,结果就是外部服务向 Bot Framework Token Service 发送用户令牌。 Bot Framework Token Service 会安全地存储此令牌,并向机器人发送包含此令牌的活动。
机器人在收到包含此令牌的活动后,就可以使用它对 MS Graph API 进行调用。
确保登录 URL 的要求
通过 Bot Framework 方便用户登录的同时,需要考虑的重要事项是如何确保登录 URL 的安全。 系统为用户提供登录 URL 时,此 URL 与该机器人的特定聊天 ID 和用户 ID 相关联。 不要共享此 URL,因为它会导致特定机器人对话出现登录错误。 为了减少使用共享登录 URL 的安全攻击,确保单击登录 URL 的计算机用户是“拥有”相应对话窗口的用户。
某些通道(例如 Microsoft Teams、Direct Line、Web 聊天)可以在用户注意不到的情况下实现这一点。 例如,WebChat 使用会话 Cookie 来确保登录流与 WebChat 聊天在同一浏览器中进行。 但是,在其他通道中,系统通常会为用户提供一个 6 位数的幻码。 这类似于内置的多重身份验证,因为 Bot Framework Token Service 在用户完成最终身份验证之前不会将令牌放出给机器人,而已登录的用户必须输入 6 位数的代码来证明自己能够访问聊天体验。
重要
请牢记这些重要的安全注意事项。 也可以在此博客文章中找到其他信息:将 WebChat 与 Azure AI 机器人服务身份验证配合使用。
后续步骤
了解用户身份验证后,让我们看看如何将其应用到机器人。