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

对 Bot Framework 身份验证进行故障排除

适用于:SDK v4

本指南通过评估一系列方案来确定问题所在,从而帮助对机器人的身份验证问题进行故障排除。

注意

若要完成本指南中的所有步骤,需下载并使用 Bot Framework Emulator,且必须有权在 Azure 门户中访问机器人的注册设置。

应用 ID 和密码

需使用向 Bot Framework 注册机器人时获取的 Microsoft 应用 ID 和 Microsoft 应用密码配置机器人安全性 。 这些值通常在机器人的配置文件中指定,用于从 Microsoft 帐户服务检索访问令牌。

如果尚未执行此操作,请将机器人部署到 Azure,以获取可用于身份验证的 Microsoft 应用 IDMicrosoft 应用密码

注意

若要查找已部署机器人的机器人 AppIDAppPassword,请参阅 MicrosoftAppID 和 MicrosoftAppPassword

步骤 1:禁用安全性,并在 localhost 上进行测试

在此步骤中,将验证在禁用安全性的情况下,机器人在 localhost 上是否处于可访问状态并能够正常运行。

警告

禁用机器人安全性可能会允许未知攻击者模拟用户。 只有在受保护的调试环境中运行时,才能实施以下过程。

禁用安全性

若要禁用机器人的安全性,请编辑其配置设置,删除应用 ID 和密码值。

如果使用 Bot Framework SDK for .NET,请在 appsettings.json 文件中添加或编辑设置:

"MicrosoftAppId": "",
"MicrosoftAppPassword": ""

在 localhost 上测试机器人

接下来,使用 Bot Framework Emulator 在 localhost 上测试机器人。

  1. 在 localhost 上启动机器人。
  2. 启动 Bot Framework Emulator。
  3. 使用 Emulator 连接到机器人。
    • 在 Emulator 的地址栏中键入 http://localhost:port-number/api/messages,其中 port-number 与运行应用程序的浏览器中显示的端口号相匹配。
    • 确保“Microsoft 应用 ID”和“Microsoft 应用密码”字段均为空 。
    • 单击“连接” 。
  4. 若要测试与机器人的连接性,请在 Emulator 中键入一些文本,然后按 Enter。

如果机器人对输入做出响应,且聊天窗口中未显示任何错误,则可确认在禁用安全性的情况下,机器人在 localhost 上处于可访问状态并能正常运行。 继续执行步骤 2

如果聊天窗口中显示一个或多个错误,请单击错误,了解详细信息。 常见问题包括:

  • Emulator 设置指定的机器人终结点不正确。 请确保 URL 中的端口号正确,URL 末尾处的路径正确,例如 /api/messages
  • Emulator 设置指定以 https 开头的机器人终结点。 在 localhost 上,终结点应以 http 开始。
  • Emulator 设置指定了“Microsoft 应用 ID”字段和/或“Microsoft 应用密码”字段的值。 这两个字段应为空。
  • 尚未禁用机器人的安全性。 验证机器人未指定应用 ID 或密码的值。

步骤 2:验证机器人的应用 ID 和密码

在此步骤中,将验证机器人用于身份验证的应用 ID 和密码是否有效。 (如果不知道这些值,请立即获取这些值。)

警告

以下说明禁用 login.microsoftonline.com 的 SSL 验证。 仅在安全网络上执行此过程,完成后请考虑更改应用程序密码。

向 Microsoft 登录服务发出 HTTP 请求

这些说明介绍如何使用 cURL 向 Microsoft 登录服务发出 HTTP 请求。 可能会使用 Postman 等备选工具,只要确保请求符合 Bot Framework 身份验证协议即可。

若要验证机器人的应用 ID 和密码是否有效,请使用 cURL(将 APP_IDAPP_PASSWORD 替换为机器人的应用 ID 和密码)发出以下请求。

提示

密码可能包含特殊字符,导致以下调用无效。 如果属于这种情况,请将 密码转换为 URL 编码。

curl -k -X POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token -d "grant_type=client_credentials&client_id=APP_ID&client_secret=APP_PASSWORD&scope=https%3A%2F%2Fapi.botframework.com%2F.default"

此请求尝试以机器人的应用 ID 和密码换取访问令牌。 如果请求成功,将收到包含 access_token 属性及其他属性的 JSON 有效负载。

{"token_type":"Bearer","expires_in":3599,"ext_expires_in":0,"access_token":"eyJ0eXAJKV1Q..."}

如果请求成功,则可确认请求中指定的应用 ID 和密码有效。 继续执行步骤 3

如果请求响应中收到错误,请检查该响应,确定错误原因。 如果响应指示应用 ID 或密码无效,请从 Bot Framework 门户获取正确的值,并使用新值重新发出请求,确认其是否有效。

步骤 3:启用安全性,并在 localhost 上进行测试

此时,已验证在禁用安全性的情况下,机器人在 localhost 上处于可访问状态并能够正常运行,并已确认机器人用于身份验证的应用 ID 和密码有效。 在此步骤中,将验证在启用安全性的情况下,机器人在 localhost 上是否处于可访问状态并能够正常运行。

启用安全性

机器人的安全性依赖于 Microsoft 服务,即使机器人仅在 localhost 上运行也是如此。 若要启用机器人的安全性,请编辑其配置设置,使用步骤 2 中验证的值填充应用 ID 和密码。 另外,请确保包是最新的,尤其是 System.IdentityModel.Tokens.JwtMicrosoft.IdentityModel.Tokens 包。

如果使用 Bot Framework SDK for .NET,请在 appsettings.config 文件中填充这些设置,或在 appsettings.json 文件中填充相应的值:

<appSettings>
  <add key="MicrosoftAppId" value="APP_ID" />
  <add key="MicrosoftAppPassword" value="PASSWORD" />
</appSettings>

如果使用 Bot Framework SDK for Node.js,请填充这些设置(或更新相应的环境变量):

var connector = new builder.ChatConnector({
  appId: 'APP_ID',
  appPassword: 'PASSWORD'
});

注意

若要查找机器人的“AppID”和“AppPassword”,请参阅 MicrosoftAppID 和 MicrosoftAppPassword

在 localhost 上测试机器人

接下来,使用 Bot Framework Emulator 在 localhost 上测试机器人。

  1. 在 localhost 上启动机器人。
  2. 启动 Bot Framework Emulator。
  3. 使用 Emulator 连接到机器人。
    • 在 Emulator 的地址栏中键入 http://localhost:port-number/api/messages,其中 port-number 与运行应用程序的浏览器中显示的端口号相匹配。
    • 在“Microsoft 应用 ID”字段输入机器人的应用 ID。
    • 在“Microsoft 应用密码”字段输入机器人的密码。
    • 单击“连接” 。
  4. 若要测试与机器人的连接性,请在 Emulator 中键入一些文本,然后按 Enter。

如果机器人对输入做出响应,且聊天窗口中未显示任何错误,则可确认在启用安全性的情况下,机器人在 localhost 上处于可访问状态并能正常运行。 继续执行步骤 4

如果聊天窗口中显示一个或多个错误,请单击错误,了解详细信息。 常见问题包括:

  • Emulator 设置指定的机器人终结点不正确。 请确保 URL 中的端口号正确,URL 末尾处的路径正确,例如 /api/messages
  • Emulator 设置指定以 https 开头的机器人终结点。 在 localhost 上,终结点应以 http 开始。
  • 在 Emulator 设置中,“Microsoft 应用 ID”字段和/或“Microsoft 应用密码”不包含有效值。 应填充这两个字段,每个字段应包含步骤 2 中验证的相应值。
  • 尚未启用机器人的安全性。 验证机器人配置设置是否指定应用 ID 和密码的值。

步骤 4:在云端测试机器人

此时,已验证在禁用安全性的情况下,机器人在 localhost 上处于可访问状态并能够正常运行,已确认机器人的应用 ID 和密码有效,并已验证在启用安全性的情况下,机器人在 localhost 上处于可访问状态并能够正常运行。 在此步骤中,将机器人部署到云,并验证在启用安全性的情况下,机器人是否处于可访问状态并能够正常运行。

将机器人部署到云

Bot Framework 要求必须可从 Internet 访问机器人,因此必须将机器人部署到 Azure 等云托管平台。 请务必在部署之前启用机器人的安全性,如步骤 3 中所述。

注意

如果尚无云托管提供程序,可注册免费帐户

如果将机器人部署到 Azure,将为应用程序自动配置 SSL,从而启用 Bot Framework 需要的 HTTPS 终结点。 如果部署到其他云托管提供程序,请务必验证应用程序是否配置 SSL,以便机器人具有 HTTPS 终结点。

测试机器人

若要在启用安全性的情况下在云端测试机器人,请完成以下步骤。

  1. 请确保机器人已成功部署并正在运行。
  2. 登录 Azure 门户
  3. 在门户中,导航到自己的机器人的 Azure 机器人资源。
  4. 在左侧的“机器人管理”窗格中,单击“在 Web 聊天中测试”。
  5. 若要测试与机器人的连接性,请在 Web 聊天控件中键入一些文本,然后按 Enter。

如果聊天窗口中指示存在错误,请使用错误消息确定错误原因。 常见问题包括:

  • 在 Bot Framework 门户的“设置”页上为机器人指定的“消息终结点”不正确 。 请确保 URL 末尾处包含的路径正确,例如 /api/messages
  • 在 Bot Framework 门户的“设置”页上为机器人指定的“消息终结点”不以 https 开头,或者不受 Bot Framework 信任 。 机器人必须具有一个有效的链信任证书。
  • 机器人的应用 ID 值或密码值未配置或配置不正确。 验证机器人配置设置是否指定有效的应用 ID 值和密码值。

如果机器人对输入作出相应响应,则可确认在启用安全性的情况下,机器人在云中处于可访问状态并能够正常运行。 此时,机器人已准备就绪,可以安全地连接到通道(如 Facebook Messenger、Direct Line 等)。

其他资源

如果完成上述步骤后仍然遇到问题,可执行以下操作:

  • 查看如何调试机器人和该部分中的其他调试文章。
  • 使用 Bot Framework Emulator 和 ngrok 隧道软件在云中调试机器人ngrok 不是 Microsoft 产品。
  • 使用 Fiddler 等代理工具检查传入和传出机器人的 HTTPS 流量。 Fiddler 不是 Microsoft 产品。
  • 查阅 Bot Connector 身份验证指南,了解 Bot Framework 使用的身份验证技术。
  • 使用 Bot Framework 支持资源,寻求他人帮助。