Azure WebBot-Cortana OAUTH Выпуск "POST to" https://CortanaBFChannelWestUS.azurewebsites.net

Проблема:

Ошибка: ошибка POST для https://cortanabfchannelwestus.azurewebsites.net/v3/activities/6TZfwIQ7Fqv: [500] Внутренняя ошибка сервера в Request._callback (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) по запросу. (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 Web-Bot: NodeJS SDKv3 Microsoft App Dev Luis Каналы: Интернет / Кортана /Skype OAuth

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

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

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

Скриншот после входа в систему

TestCase: канал Skype: успешное отображение и вход в систему Channel Web: успешное отображение и вход в систему Channel Cortana: сбой (нет отображения карты "входа")

Канал Cortana: сбой (нет отображения карты входа) Теперь я использую приложение Cortana на iphone, и для того же действия "высказывание намерения" вот что происходит

Снимок экрана Канал Cortana Invocation

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

Заметки:

В рамках Web-Bot Когда это 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.

Но Cortana говорит, что Cortana MSA Authentication и это не сработало

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

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

Спасибо

2 ответа

Решение

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

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

Позвольте мне знать, если это помогает.

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

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

Спасибо!

Другие вопросы по тегам