Https/BotAuthentication 打破 botframework 机器人?

Https/BotAuthentication breaking botframework bot?

我在尝试创建机器人时遇到问题。当我使用 Http 时,一切似乎都工作正常。我可以将我的应用程序部署到我的网站并通过模拟器或 botframework.com.

与机器人交互

不幸的是,当我尝试使用 HTTPS 时,模拟器出现 401 错误,并且当我尝试使用 botframework.com 时没有任何显示。

为了让我crystal清楚,我唯一改变的是: 1. 将 [BotAuthentication] 属性添加到我的 ApiController 中,如下所示:

[BotAuthentication]
public class MessagesController : ApiController
  1. http://mywebsite.com/api/messages to https://mywebsite.com/api/messages
  2. 更新了 emulator/botframework.com 中的 URL

Web.config都是用appId和AppSecret设置的。我的网站已有 SSL 证书。

有什么我遗漏的吗?虽然我在假设没有其他需要设置的东西之前从未使用过基本身份验证,对吗?

理论上,根据您对所做更改的描述,这应该可行。这是模拟器与您的云服务或本地主机上的机器人对话?您是否也从门户中的 Bot Framework 测试控件中收到此错误?

如果你把你的 BotId 发给我 botframework@microsoft.com 我可以检查我们的日志,看看是否有什么有趣的东西(或者通过 Twitter 上的@jameslew 私信我)。

我遇到了您的终结点,IIS 正在响应基本身份验证并妨碍您。

基本身份验证的工作方式如下: 有一个 header 包含编码为 base64 的 UserId:Password 如果服务器没有看到 header 它 returns 带有“基本”的 403 表示该网站需要身份验证令牌。对于 Web 浏览器,这意味着它将弹出一个常用 user/password 对话框,然后它会使用 header 再次提交请求。 如果提供了 header 但 user/password 错误,则服务器 returns 401。

通常基本身份验证用于在数据库中查找,但在我们的例子中只有 1 个用户,它是 bot appid/appsecret。 BotAuthorization 属性所做的全部工作是向请求管道添加一个检查器,以查找其中包含 appid/appsecret 的 header,以确保只有经过批准的呼叫者才能呼叫您的机器人。

如果您不关心,您可以简单地删除该属性。无论如何,您都不希望 IIS 介入该过程。

有道理吗?