Azure WebBot-Cortana OAUTH Выпуск "POST to 'https://CortanaBFChannelWestUS.azurewebsites.net - PullRequest
0 голосов
/ 18 марта 2019

Проблема:

Ошибка: ошибка POST для 'https://CortanaBFChannelWestUS.azurewebsites.net/v3/conversations/../activities/6TZfwIQ7Fqv': сбой: [500] Внутренняя ошибка сервера при запросе обратного вызова (D: \ home \ site \ wwwroot \)node_modules \ botbuilder \ lib \ bots \ ChatConnector.js: 675: 46) в Request.self.callback (D: \ home \ site \ wwwroot \ node_modules \ request \ request.js: 185: 22) в emitTwo (events.js): 106: 13) на Request.emit (events.js: 191: 7) на запрос.(D: \ home \ site \ wwwroot \ node_modules \ request \ request.js: 1161: 10) в emitOne (events.js: 96: 13) в Request.emit (events.js: 188: 7) в IncomingMessage.(D: \ home \ site \ wwwroot \ node_modules \ request \ request.js: 1083: 12) в IncomingMessage.g (events.js: 291: 16) в emitNone (events.js: 91: 20)

Архитектура: Веб-бот Aure: NodeJS SDKv3 Microsoft App Dev Luis Каналы: Web / Cortana / Skype OAuth

Сценарий: При достижении цели на основеСказанное приложение успешно отображает пользователю карту входа в систему и просит пользователя выполнить вход

Снимок экрана входа в приложение

После этого пользовательможет успешно войти в систему с использованием учетных данных, которые аутентифицируются с помощью OAuth для доступа к Office 365

ScreenShot после входа в систему

TestCase: Канал Skype:Успешное отображение и вход в сеть Channel Web: Успешное отображение и вход в систему Channel Cortana: Ошибка (нет отображения карты «входа»)

Channel Cortana: Ошибка (Нет отображения карты «входа») Теперь я являюсьс помощью приложения Cortana на iphone и для того же действия высказывания намерения это то, чтопроисходит

Снимок экрана Вызов канала Cortana

И ошибка, отображаемая на консоли, показана выше

Примечания:

В рамках платформы Web-Bot Когда для канала OAuth используется Skype или Web, обратный вызов для OAuth отображается на

server.get('/api/OAuthCallback',
    passport.authenticate('azuread-openidconnect', { failureRedirect: '/'}),
    (req, res) => {
    const address = JSON.parse(req.query.state);
    const messageData = { accessToken: req.user.accessToken, refreshToken: req.user.refreshToken, userId: address.user.id, name: req.user.displayName};
    var continueMsg = new builder.Message().address(address).text(JSON.stringify(messageData));
    bot.receive(continueMsg.toMessage());
    res.send('Welcome ' + req.user.displayName + '. Login successful. You can close this browser window')
});

Основная идея для OAuth, реализованная так:URl сопоставляется с обратным вызовом, как определено в Web-App-Platform.

Но Кортана говорит Аутентификация MSA Cortana , и это не сработало

  1. Для одного URL там сопоставляется https://www.bing.com/agents/oauth вместо определенного обратного вызовав web-app-bot-url / api / OAuthCallback
  2. Может кто-нибудь объяснить, как работает Аутентификация для Cortana, учитывая указанную ими арку

Может кто-нибудь пролить свет нав чем именно заключается проблема, которую я знаю, я упускаю что-то важное, что касается понимания.

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

@ Micromuncher, Бад, я наконец-то получил базовую работу с кодом.Что я упустил, так это простоту способа получения токена.Я использовал паспорт ранее для получения Auth Code и сложности, связанной с ним, я думаю, что в конечном итоге мы перестали проектировать мыслительный процесс.

Теперь выясним, как сделать этот канал специфичным, чтобы только для Cortana использовался поток Cortana, а для всего остального использовался поток passport-openid.

Спасибо!

0 голосов
/ 18 марта 2019

спасибо за это.

OAuth Кортаны работает не так, как бот-фреймворк.

Начиная с регистрации приложения; Если вы включите «Управление идентификацией для вас» в Cortana, Cortana отправит карточку входа, если вы включите «Вход в систему при вызове». Вашему боту никогда не нужно отправлять карту входа в качестве вложения, если Cortana является каналом. Вы регистрируете конечные точки Microsoft AAD oauth на странице конфигурации канала Cortana, а затем при регистрации вашего приложения отображается URL-адрес перенаправления на https://www.bing.com/agents/oauth, чтобы Cortana узнала, что такое токен авторизации.

Далее, используя токен Cortana для аутентификации, вы получите его в активности (сообщении) после входа в систему. С помощью botframework он хранится в хранилище ключей, поэтому вам нужно получить его.

Если у вас нет «входа в систему при вызове», вы отправляете oauth-карту в качестве вложения, а затем Cortana запускает oauth-поток, но при визуализации запроса на вход в систему от Cortana используется только заголовок.

Обратите внимание, что регистрация приложения; URL перенаправления должен быть из того же домена, что и инициатор потока oauth. (А для Кортаны это бинг.)

Если вы не хотите использовать OAuth Кортаны, вы оставляете флажок «Кортана будет управлять моей личностью» отключенным. Используйте карту входа и управляйте oauth самостоятельно. Но не забывайте, что вам также нужно управлять токенами обновления (что Cortana сделает для вас, если вы используете область offline_access).

Подробнее о Кортане можно узнать здесь; https://docs.microsoft.com/en-us/cortana/skills/authentication

У меня есть некоторые проекты документации по различиям здесь; https://github.com/bw-kforce-ms/CortanaSkillsWIP/blob/master/Support/OAuth.md

Дайте мне знать, если это поможет.

...