Я использовал ботбилдер-js для написания собственного бота. В какой-то момент требуется, чтобы пользователь вошел в систему, поэтому бот отправляет диалоговое окно OAuthPrompt, которое заставляет пользователя войти в систему (с помощью Google, который я настроил в параметрах подключения OAuth портала Azure). Он отлично работает в эмуляторе Bot Framework, но когда я интегрирую бота с Cortana, после входа пользователя в систему он попадает на эту страницу:
Самое интересное, что это диалоговое окно является модальным, поэтому я не могу вставить код в чат Кортаны, даже если бы захотел.
Что мне нужно сделать, чтобы Кортана не требовала этого волшебного кода?
Нет, я не настраивал подключенные службы в настройках Cortana - я использую «Параметры подключения OAuth», которые находятся в настройках бота. Я добавил поставщика услуг "Google" (на которого ссылается мой бот), установил свой идентификатор клиента + секрет клиента + область действия ("электронная почта"). Поэтому я нигде не указывал URL-адрес перенаправления
Кортана тупит, когда выставляет холст для карточки oauth или входа в систему. Он доверяет диспетчеру удостоверений (в вашем случае Google), чтобы обеспечить достойный опыт. Похоже, что настройка двухфакторной аутентификации в аккаунте мешает работе. Я могу попробовать воспроизвести это, но, вероятно, ничего не могу с этим поделать. Возможно также задать вопрос экспертам google oauth.
Пожалуйста, пришлите мне точные настройки подключения oauth; Мне нужно увидеть URI авторизации и URI перенаправления. Не стесняйтесь очищать client_id.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Уже ответил на это на GitHub репо botbuilder-js. Отвечаем для большей наглядности.
Похоже, это ошибка. Я смог воспроизвести проблему. Если вы скопируете код, вы можете ввести его как новую команду для бота. Это ужасный обходной путь, но он будет работать, пока пользовательский интерфейс не будет исправлен. Следуй этим шагам:
Следуя инструкциям в 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]
Вы не должны настраивать внешнюю аутентификацию (также известную как copy / paste auth urn:ietf:wg:oauth:2.0:oob) - потому что это означает, что диспетчер удостоверений не вызывает redirect_url (или redirect_uri), когда поток завершается (позволяя службе ботов или Кортане знать, что вы повторный вход в систему), и, что более важно, вы, вероятно, не хотите, чтобы пользователь вставлял какой-то код, чтобы получить токен доступа. Если вы выполните https://developers.google.com/identity/protocols/OAuth2InstalledApp, вы увидите, что uri перенаправления должен быть либо фреймворком бота, либо кортаной, а не внеполосным. Сделайте это, и код должен быть получен запрашивающей стороной программно. Вы можете настроить это в приложении Google, нажав на колонку учетных данных.
URI перенаправления для службы ботов - https://token.botframework.com/.auth/web/redirect, а URI перенаправления для Кортаны - https://www.bing.com/agents/oauth. Вы можете поддерживать и то, и другое, если ваш бот поддерживает несколько каналов (и различать поведение в зависимости от имени канала, привязанного к событию) - просто не забудьте изменить запрос входа в Cortana на «Вход при необходимости»
Вы включили "Подключенные службы"? Не надо. Если вы используете карты входа в систему или авторизацию для ботов, вы несете ответственность за поток OAuth. Кортана поддерживает прозрачную обработку oauth только в том случае, если вы делегируете ей (то есть вы настраиваете oauth канала cortana через его страницу конфигурации). И затем часть входа в систему принадлежит провайдеру управления идентификацией (так что ... это выглядит как у вас плохой URL-адрес перенаправления; что это такое?)