Https/BotAuthentication ломает бота botframework?

У меня проблема с попыткой создать бота. Кажется, все работает нормально, когда я использую Http. Я могу развернуть свое приложение на своем веб-сайте и взаимодействовать с ботом через эмулятор или botframework.com.

К сожалению, когда я пытаюсь использовать HTTPS, я получаю ошибку 401 от эмулятора, и ничего не появляется, когда я пытаюсь использовать botframework.com.

Просто чтобы я был кристально ясным, единственное, что я изменил, это: 1. Добавлен атрибут [BotAuthentication] в мой ApiController следующим образом:

[BotAuthentication]
public class MessagesController : ApiController
  1. Обновлен URL-адрес в эмуляторе/botframework.com с http://mywebsite.com/api/messages на https://mywebsite.com/api/messages

Web.config настроен с помощью appId и AppSecret. У моего сайта уже есть SSL-сертификат.

Есть ли что-то, чего мне не хватает? Хотя я никогда раньше не использовал обычную аутентификацию, я предполагаю, что мне больше ничего не нужно настраивать, верно?


person sudo007    schedule 22.04.2016    source источник
comment
Для тех, кто читает это позже, выясняется, что в моем экземпляре IIS включена базовая аутентификация. Похоже, это мешало атрибуту BotAuthentication, как описано Т. Лэрдом-МакКоннеллом ниже. Мое решение состояло в том, чтобы удалить базовую аутентификацию в web.config.   -  person sudo007    schedule 23.04.2016


Ответы (2)


Я попал в ваш endpoing, и IIS отвечает на базовую аутентификацию и мешает.

Базовая аутентификация работает следующим образом: есть заголовок, который содержит UserId:Password, закодированный как base64. Если сервер не видит заголовок, он возвращает 403 с «базовым», чтобы сигнализировать о том, что веб-сайт требует токена аутентификации. Для веб-браузера это означает, что он откроет стандартное диалоговое окно пользователя/пароля, а затем снова отправит запрос с заголовком. Если заголовок предоставлен, но пользователь/пароль неверны, сервер возвращает 401.

Обычно для поиска в базе данных используется базовая аутентификация, но в нашем случае есть только 1 пользователь, это бот appid/appsecret. Все, что делает атрибут BotAuthorization, — это добавляет инспектора в конвейер запросов для поиска заголовка с appid/appsecret в нем, чтобы убедиться, что только утвержденные вызывающие абоненты могут вызывать вашего бота.

Если вас это не волнует, вы можете просто удалить атрибут. В любом случае, вы не хотите, чтобы IIS совал свой нос в процесс.

Есть смысл?

person T Laird-McConnell    schedule 23.04.2016

Теоретически это должно работать на основе вашего описания изменений, которые вы сделали. Это эмулятор разговаривает с вашим облачным сервисом или с ботом на локальном хосте? И вы также получаете эту ошибку из тестового элемента управления Bot Framework на портале?

Если вы отправите мне свой BotId на адрес [email protected], я смогу проверить наши журналы, чтобы узнать, есть ли что-нибудь интересное (или написать мне в DM @jameslew в Твиттере).

person Jim Lewallen    schedule 22.04.2016