Веб-чат OAuth SSO не продолжает диалог после входа в систему - PullRequest
0 голосов
/ 01 мая 2020

Проблема, с которой мы сталкиваемся сейчас, заключается в том, что как только мы нажимаем на кнопку 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 в браузере

Снимки экрана

image

Исходный код бота

Вот фрагмент из 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, но он этого не делает (пробовал, устанавливая точки останова)

Был бы очень признателен за помощь в этом вопросе.

...