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 и это не сработало
- Например, URL-адрес отображается на https://www.bing.com/agents/oauth вместо обратного вызова, определенного в web-app-bot-url/api/OAuthCallback.
- Может кто-нибудь объяснить, как работает аутентификация для 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.
Спасибо!