Технически, это альтернативное решение (я думаю).Для создания учетных данных Google Hangouts требуется учетная запись GSuite, которой у меня нет.Интерфейс HangoutsAdapterOptions docs указывает «Общий секретный токен [используется]» для проверки и находится на вкладке «Конфигурация».Поскольку поля заблокированы, я не могу это проверить.
Однако альтернативой является использование встроенной функции OAuth в Bot Framework.Я использую это в своем боте без помех.Я совершил переход на веб-сайт Google Hangouts, и он сразу меня узнал.При использовании имени входа OAuth возвращается токен, который можно использовать для передачи в адаптер Hangouts.
Я должен добавить, что приведенная ниже реализация создает магический код входа, который некоторым людям не нравится (не беспокоит меня).Может быть вариант единого входа, но я не исследовал это.
Во-первых, вам нужно настроить учетные данные Google, которые предоставят вам «Идентификатор клиента» и «Секрет клиента».Общие инструкции можно найти здесь .Учетные данные могут быть созданы здесь .Вы можете игнорировать любые ссылки на кодирование, так как они не нужны (благодаря функции BF OAuth).
На странице учетных данных нажмите «Учетные данные» в левом меню.Есть две области, которые необходимо настроить, когда-то там: «Экран согласия OAuth» и «Учетные данные».
Для экрана согласия OAuth предоставьтеИмя приложения.Это не обязательно должно соответствовать ассоциированному запрашивающему приложению и предназначено только для справки при посещении страницы учетных данных.Введите адрес электронной почты службы поддержки, области, которые вы будете использовать (адрес электронной почты, профиль и openid).Могут быть и другие необходимые области, но это сработало для меня, когда я зашел на сайт Hangouts.Наконец, войдите в Авторизованные Домены.Требуется домен botframework.com
.Другие, если таковые имеются, вам придется экспериментировать.Сохраните и вернитесь на страницу учетных данных.
Нажмите кнопку «Создать учетные данные» и заполните форму.Дайте своим учетным данным имя (опять же, нигде больше не упоминается для этого проекта), введите любые авторизованные источники и введите https://token.botframework.com/.auth/web/redirect
в качестве авторизованного URI перенаправления.Сохраните настройки, скопируйте «Идентификатор клиента» и «Секрет клиента» куда-нибудь и перейдите в Azure и перейдите на страницу настроек вашего бота.
Здесь вам необходимо создать OAuth-соединение вашего бота.Это делается в блейде настроек.В нижней части блейда находится раздел «Настройки подключения OAuth».Нажмите кнопку «Добавить настройку», чтобы начать.
После этого, дайте имя вашему соединению.Это имя будет упоминаться вашим ботом на следующем шаге, поэтому сохраните его где-нибудь.Затем выберите Google из списка поставщиков услуг и вставьте «Идентификатор клиента» и «Секрет клиента», которые вы сохранили ранее, в соответствующие поля.В поле «Области» вы захотите ввести те же значения области, которые вы выбрали в своем приложении учетных данных Google («openid профиля электронной почты»).При вводе убедитесь, что они разделены пробелами.
Наконец,вам нужно смоделировать ваш логин OAuth с примера 18.bot-authentication из репозитория Botbuilder-Samples.Это обеспечивает функциональность, необходимую для того, чтобы пользователь мог войти в систему через вашего бота.
Добавьте имя соединения, которое вы присвоили настройке соединения Google для вашего бота, в файл .env в виде переменной, например:connectionName=<CONNECTION_NAME>
.
При настройке приглашения OAuth вы передадите эту переменную в:
this.addDialog(new OAuthPrompt(OAUTH_PROMPT, {
connectionName: process.env.connectionName,
text: 'Please Sign In',
title: 'Sign In',
timeout: 300000
}));
На этом этапе ваш бот и процесс входа в систему должны быть в порядке.Предполагая, что поток настроен правильно, пользователь должен иметь возможность войти в систему через приглашение OAuth, используя магический код.Токен возвращается обратно в бот, который будет доступен через context
на следующем шаге.Затем токен может быть сохранен в состояние и передан адаптеру для использования.В следующем бите я использую простой водопад с шагом oauthPrompt
и шагом loginResults
.Токен захватывается на втором шаге, где я его консоль регистрирую.
async oauthPrompt(step) {
return await step.prompt(OAUTH_PROMPT, {
prompt: {
inputHint: 'ExpectingInput'
}
});
}
async loginResults(step) {
let tokenResponse = step.result;
console.log('TOKEN: ', tokenResponse);
if (tokenResponse != null) {
await step.context.sendActivity('You are now logged in.');
return await step.prompt(CONFIRM_PROMPT, 'Do you want to view your token?', ['yes', 'no']);
}
// Something went wrong, inform the user they were not logged in
await step.context.sendActivity('Login was not successful please try again');
return await step.endDialog();
}
Надежда на помощь!