Проблема, с которой мы сталкиваемся сейчас, заключается в том, что как только мы нажимаем на кнопку Login
в OAuthPrompt из веб-чата, SSO вступает во владение и происходит вход, но когда поток возвращается к веб-чату, ничего не происходит и бот просто зависает.
В создаваемом нами боте Microsoft Bot Framework (v4) мы реализовали новые функции SSO OAuth, которые были рекомендованы в этом блоге здесь и здесь,
1) У нас изначально была установка <iframe>
, которая запрашивала код Magi c.
2) Затем мы изменили настройку <iframe>
и перешли на канал DirectLine, изменив исходный код веб-чата, чтобы обменять секрет бота на токен (мы также передаем уникальный идентификатор пользователя в формате - dl_guid()
)
3) Мы передаем этот токен методу window.WebChat.createDirectLine
, полученному из CDN - https://cdn.botframework.com/botframework-webchat/latest/webchat.js
4) У нас есть AADV2 Setup с правильными областями и у нас также настроен бот для этого AAD.
5) Мы также включили Enhanced Authentication options
для канала DirectLine и добавили среду localhost
dev и среду размещенного сервера в список Trusted Origin
6) Мы также включили сторонние файлы cookie в браузере
Снимки экрана
Исходный код бота
Вот фрагмент из AuthDialog что мы используем (TypeScript)
export class AuthDialog extends BaseDialog {
constructor(
private dialogContextUtils: DialogContextUtils,
private userManager: UserManager,
appConfig: AppConfig
) {
super(AUTH_DIALOG_ID, AUTH_WATERFALL_DIALOG, [
step => this.promptStep(step),
step => this.loginStep(step)
]);
this.addDialog(
new OAuthPrompt(OAUTH_PROMPT, {
connectionName: appConfig.connectionName,
text: 'Please login',
title: 'Login',
timeout: 300000
})
);
}
private async promptStep(step: WaterfallStepContext) {
return await step.beginDialog(OAUTH_PROMPT);
}
private async loginStep(step: WaterfallStepContext) {
const tokenResponse = step.result;
if (tokenResponse) {
await step.context.sendActivity(`Hi`);
}
return await step.endDialog(tokenResponse);
}
Если мы посмотрим на код, бот должен по существу войти в loginStep
, но он этого не делает (пробовал, устанавливая точки останова)
Был бы очень признателен за помощь в этом вопросе.