Azure Bot 当使用 ngrok 为渠道团队进行本地调试时,会引发以下异常“无法获取客户端凭据的令牌”。

Chi*_*raj 3 c# azure ngrok botframework azure-authentication

System.AggregateException:“无法获取客户端凭据的令牌。(参数:连接字符串:RunAs=App;AppId=bc107559-ff62-4f67-8dd4-0dce6a0fe426,资源: https: //api.botframework.com,权限:。异常消息:尝试使用托管服务身份获取令牌。无法连接到实例元数据服务 (IMDS)。跳过对托管服务身份 (MSI) 令牌端点的请求。)'

内部异常:AzureServiceTokenProviderException:参数:连接字符串:RunAs=App;AppId=bc107559-ff62-4f67-8dd4-0dce6a0fe426,资源: https: //api.botframework.com,权限:。异常消息:尝试使用托管服务身份获取令牌。无法连接到实例元数据服务 (IMDS)。跳过对托管服务身份 (MSI) 令牌端点的请求。

当尝试向用户发送消息或获取用户详细信息时,会引发上述异常:

  var messageText ="What can I help you with today?\nSay something like \"Book a flight from Paris to Berlin on March 22, 2020\"";
  var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput);
  return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken);
Run Code Online (Sandbox Code Playgroud)

异常在第三行抛出,即尝试向用户发送提示消息时

小智 5

用户分配的托管身份 (UAMI) 机器人无法在 Azure 外部进行测试。出于安全原因,托管标识端点将仅响应来自 Azure 内部的请求。如托管身份文档和Azure SDK 存储库上的此github 问题所示。

本地测试的唯一选择是创建一个单独的多租户 Azure Bot 资源,并使用它通过 ngrok 测试您的机器人。您不需要创建应用服务,只需创建机器人即可。

或者,您始终可以将机器人部署到 Azure 来测试它。