Как заставить Cortana OAuth не использовать Magic Code

Я использовал botbuilder-js, чтобы написать собственного бота. В какой-то момент требуется, чтобы пользователь выполнил вход, поэтому бот отправляет диалоговое окно OAuthPrompt, которое заставляет пользователя войти в систему (с помощью Google, который я настроил в параметрах подключения OAuth портала Azure). Он отлично работает в эмуляторе Bot Framework, но когда я интегрирую бота с Cortana, после входа пользователя он попадает на эту страницу:

введите здесь описание изображения

Самое интересное, что это диалоговое окно является модальным, поэтому я не могу вставить код в чат Cortana, даже если бы захотел.

Что мне нужно сделать, чтобы заставить Кортану не требовать этот волшебный код?


person Tomáš Bezouška    schedule 16.12.2018    source источник
comment
Вы включили подключенные службы? Не. Если вы используете карточки для входа в службу ботов или аутентификацию, вы несете ответственность за поток oauth. Cortana поддерживает прозрачную обработку oauth только в том случае, если вы делегируете ему полномочия (то есть вы настраиваете oauth канала cortana через его страницу конфигурации). Затем часть входа принадлежит поставщику управления идентификацией (так что... похоже ваш URL-адрес перенаправления неверный; что это?)   -  person Micromuncher    schedule 18.12.2018
comment
Нет, я не настраивал подключенные службы в настройках Cortana — я использую настройки подключения OAuth, которые находятся в настройках бота. Я добавил поставщика услуг Google (на который ссылается мой бот), установил свой идентификатор клиента + секрет клиента + область действия (адрес электронной почты). Поэтому я никуда не вставлял URL-адрес перенаправления.   -  person Tomáš Bezouška    schedule 18.12.2018
comment
Cortana глупа, когда создает холст для oauth или карты входа. Это зависит от менеджера удостоверений (в вашем случае Google), чтобы обеспечить достойный опыт. Похоже, что 2FA, настроенная для учетной записи, искажает опыт. Я могу попытаться воспроизвести это, но я, вероятно, ничего не могу с этим поделать. Возможно, также задайте вопрос экспертам Google по oauth.   -  person Micromuncher    schedule 18.12.2018
comment
Пожалуйста, пришлите мне точные настройки подключения oauth; Мне нужно увидеть URI авторизации и URI перенаправления. Не стесняйтесь очищать client_id.   -  person Micromuncher    schedule 09.01.2019


Ответы (2)


Уже ответил на этот вопрос в репозитории botbuilder-js на GitHub. Отвечаю для большей наглядности.

Похоже, это ошибка. Я смог воспроизвести проблему. Если вы скопируете код вниз, вы можете ввести код в качестве новой команды для бота. Это ужасный обходной путь, но он будет работать, пока пользовательский интерфейс не будет исправлен. Следуй этим шагам:

  1. Откройте Cortana и подключитесь к своему боту («скажите [боту] привет»)
  2. Нажмите кнопку входа
  3. Запишите магический код из окна
  4. Open Cortana and re-connect to your bot
    • Tell your bot the magic code ("tell [bot] [magic code]")
    • Вход должен быть успешным
  5. Взаимодействуйте со своим ботом
person Steven Kanberg    schedule 20.12.2018

Следуя инструкциям в Google, я обнаружил, что URL-адрес перенаправления является причиной, по которой вам предлагается ввести магический код. Если вы используете инструменты Google и настроили внеполосную аутентификацию, вы получите URL-адрес авторизации OAuth, который выглядит следующим образом...

Authorize this app by visiting this url: 
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly&response_type=code&client_id=[my client id]&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
Enter the code from that page here: [your code]

Вы не должны настраивать внеполосную аутентификацию (также известную как копирование/вставка аутентификации urn:ietf:wg:oauth:2.0:oob), потому что это означает, что диспетчер удостоверений не вызывает redirect_url (или redirect_uri) после завершения потока (сообщая службе бота или кортане, что вы повторный вход в систему), и, что более важно, вы, вероятно, не хотите, чтобы пользователь вставлял какой-либо код, чтобы получить токен доступа. Если вы подписаны на https://developers.google.com/identity/protocols/OAuth2InstalledApp вы увидите, что URI перенаправления должен быть либо фреймворком бота, либо кортаной, а не внештатным. Сделайте это, и запросчик должен программно принять код. Вы можете настроить это в реестре приложений Google, щелкнув колонку учетных данных.

person Micromuncher    schedule 10.01.2019
comment
URI перенаправления для службы ботов — https://token.botframework.com/.auth/web/redirect, а URI перенаправления для Кортаны — https://www.bing.com/agents/oauth. Вы можете поддерживать оба варианта, если ваш бот поддерживает несколько каналов (и различать поведение на основе имени канала, прикрепленного к событию) — просто не забудьте изменить приглашение Кортаны для входа в систему на Войти, когда это необходимо. - person Micromuncher; 10.01.2019