Есть ли способ сделать единый вход для веб-чата платформы Microsoft Bot через API DirectLine и веб-приложение Azure с использованием абстракции Oauth2.0 - PullRequest
1 голос
/ 15 апреля 2020

Идея заключается в создании приложения SPA с реализацией бота Microsoft, который будет встроен в веб-приложение Azure. Приложение будет использовать имя входа Oauth2 openId connect, которое будет использовать другие учетные данные, такие как Google, GitHub, Facebook и Microsoft.

Я знаю, что могу аутентифицировать разговор, чтобы включить идентификатор пользователя в токенизацию бота. Эта документация находится здесь.

Вопрос, который у меня возникает, заключается в том, что если у меня есть логин путь к диалогу, такой как объяснен здесь. Проблема, которую я видно, что наличие входа на сайт не активирует необходимый токен для входа в бот, чтобы он мог вызывать другие сервисы API. Или я могу эффективно извлечь токен из веб-браузера и использовать его для токена, который мне нужен для получения информации о пользователе, такой как электронная почта или логин и номер sh для доступа к услуге?

Мне нужна такая же защита и активация маршрута для внутренней части бота, если пользователь заходит на сайт вне бота, не заставляя его снова входить в бот.

Что я могу сделать, чтобы жетон сайта воздействовал на саму систему?

Но если пользователь, использующий бота в другом канале как таковой, Facebook, ему все равно придется войти в бот, чтобы go пройти по определенным диалоговым путям.

1 Ответ

0 голосов
/ 18 апреля 2020

Решение, которое я считаю лучшим, - это взять заметки из оригинального поста в блоге, который я разместил в исходном вопросе.

Итак, план такой с этим кодом.

// Generates a Direct Line token 
server.post('/directline/token', (req, res) => { 
  const options = { 
    method: 'POST', 
    uri: 'https://directline.botframework.com/v3/directline/tokens/generate', 
    headers: { 
      'Authorization': `Bearer ${process.env.directLineSecret}` 
    }, 
    json: { 
      User: { 
        Id: userId 
      } 
    } 
  }; 
  request.post(options, (error, response, body) => { 
    if (!error && response.statusCode < 300) { 
      res.send({ 
        token: body.token 
      }); 
    } else { 
      res.status(500).send('Call to retrieve token from DirectLine failed'); 
    } 
  }); 

Вы должны получить идентификатор и информацию о пользователе из хранилища localalstorage и использовать их для передачи идентификатора в создание токена диалога, как показано на контроллере выше. Как только это было передано в бот, бот знает, что он «знает» о userId, и теперь вы можете использовать эту информацию в качестве аутентификации для бота, а не запрашивать его самостоятельно. Кроме того, этот идентификатор будет использоваться для пользователей других вызовов API вниз по течению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...