你当前正在访问 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 应用 ID 和 Microsoft 应用密码。
注意
若要查找已部署机器人的机器人 AppID 和 AppPassword,请参阅 MicrosoftAppID 和 MicrosoftAppPassword。
步骤 1:禁用安全性,并在 localhost 上进行测试
在此步骤中,将验证在禁用安全性的情况下,机器人在 localhost 上是否处于可访问状态并能够正常运行。
警告
禁用机器人安全性可能会允许未知攻击者模拟用户。 只有在受保护的调试环境中运行时,才能实施以下过程。
禁用安全性
若要禁用机器人的安全性,请编辑其配置设置,删除应用 ID 和密码值。
如果使用 Bot Framework SDK for .NET,请在 appsettings.json 文件中添加或编辑设置:
"MicrosoftAppId": "",
"MicrosoftAppPassword": ""
在 localhost 上测试机器人
接下来,使用 Bot Framework Emulator 在 localhost 上测试机器人。
- 在 localhost 上启动机器人。
- 启动 Bot Framework Emulator。
- 使用 Emulator 连接到机器人。
- 在 Emulator 的地址栏中键入
http://localhost:port-number/api/messages
,其中 port-number 与运行应用程序的浏览器中显示的端口号相匹配。 - 确保“Microsoft 应用 ID”和“Microsoft 应用密码”字段均为空 。
- 单击“连接” 。
- 在 Emulator 的地址栏中键入
- 若要测试与机器人的连接性,请在 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_ID
和 APP_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.Jwt
和 Microsoft.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 上测试机器人。
- 在 localhost 上启动机器人。
- 启动 Bot Framework Emulator。
- 使用 Emulator 连接到机器人。
- 在 Emulator 的地址栏中键入
http://localhost:port-number/api/messages
,其中 port-number 与运行应用程序的浏览器中显示的端口号相匹配。 - 在“Microsoft 应用 ID”字段输入机器人的应用 ID。
- 在“Microsoft 应用密码”字段输入机器人的密码。
- 单击“连接” 。
- 在 Emulator 的地址栏中键入
- 若要测试与机器人的连接性,请在 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 终结点。
测试机器人
若要在启用安全性的情况下在云端测试机器人,请完成以下步骤。
- 请确保机器人已成功部署并正在运行。
- 登录到 Azure 门户。
- 在门户中,导航到自己的机器人的 Azure 机器人资源。
- 在左侧的“机器人管理”窗格中,单击“在 Web 聊天中测试”。
- 若要测试与机器人的连接性,请在 Web 聊天控件中键入一些文本,然后按 Enter。
如果聊天窗口中指示存在错误,请使用错误消息确定错误原因。 常见问题包括:
- 在 Bot Framework 门户的“设置”页上为机器人指定的“消息终结点”不正确 。 请确保 URL 末尾处包含的路径正确,例如
/api/messages
。 - 在 Bot Framework 门户的“设置”页上为机器人指定的“消息终结点”不以
https
开头,或者不受 Bot Framework 信任 。 机器人必须具有一个有效的链信任证书。 - 机器人的应用 ID 值或密码值未配置或配置不正确。 验证机器人配置设置是否指定有效的应用 ID 值和密码值。
如果机器人对输入作出相应响应,则可确认在启用安全性的情况下,机器人在云中处于可访问状态并能够正常运行。 此时,机器人已准备就绪,可以安全地连接到通道(如 Facebook Messenger、Direct Line 等)。
其他资源
如果完成上述步骤后仍然遇到问题,可执行以下操作:
- 查看如何调试机器人和该部分中的其他调试文章。
- 使用 Bot Framework Emulator 和 [Dev Tunnels](https://aka.ms/devtunnels隧道软件)在云中调试机器人。
- 使用 Fiddler 等代理工具检查传入和传出机器人的 HTTPS 流量。 Fiddler 不是 Microsoft 产品。
- 查阅 Bot Connector 身份验证指南,了解 Bot Framework 使用的身份验证技术。
- 使用 Bot Framework 支持资源,寻求他人帮助。