Botframework-solutions: [docs] Создайте документацию HowTo о том, как добавить аутентификацию в виртуальную машину напрямую, а не полагаться на навыки

Созданный на 12 июл. 2019  ·  17Комментарии  ·  Источник: microsoft/botframework-solutions

Ваш запрос функции связан с проблемой? Пожалуйста, опишите.

Хотя шаблон генерирует код для графического API, нет простого примера или процедуры для проверки подлинности нового созданного виртуального помощника и последующего использования этого API.

Какое решение вы ищете?

Процедура, пример или конфигурация, позволяющая использовать клиент графа, запрашивающий активацию аутентификации, после создания исходного кода йомена для виртуального помощника в машинописном тексте и способ с примерами для развертывания локальных навыков в машинописном тексте.

Какие альтернативы вы рассматривали?

развить новый навык машинописного текста и использовать инструмент botskills connect , чтобы попытаться увидеть изменения в решении виртуального помощника и увидеть измененные части кода.

Есть ли какой-либо другой контекст, который вы можете предоставить?

созданный новый навык имеет аналогичную и большую часть исходного кода исходного генератора виртуальной помощи. Для некоторых простых сценариев развертывания нецелесообразно создавать совершенно новое бот-решение только для фрагмента функциональности общего виртуального помощника (например, когда нагрузка запроса не имеет смысла). Таким образом, есть некоторые описания параметров инструмента botskills для распознавания локального манифеста, но не существует реального примера машинописного текста, работающего с локальными навыками, и не существует примера навыков, запрашивающих учетные данные oauth в машинописном тексте.

Все 17 Комментарий

@andhdo Достаточно ли страницы документации, показывающей, как вы можете использовать виртуального помощника и добавить шаг аутентификации перед вызовом Graph, для того, что вам нужно? Это также будет включать шаги ручной настройки, необходимые для создания аутентификационного соединения?

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

ОК — имеет смысл — я обновлю этот рабочий элемент и обновлю документы на следующей неделе. Несколько раз вы говорили, что полезно выполнять аутентификацию исключительно в VA, а не полагаться на навыки в некоторых сценариях.

Основа описана здесь, и я сосредоточусь на ней для VA (и это будет намного проще, чем это)
https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-authentication?view=azure-bot-service-4.0&tabs=aadv1%2Ccsharp%2Cbot-oauth

Да; Я сделал упражнение для запуска этих сценариев, но идея состоит в том, чтобы реализовать его наилучшим образом внутри виртуального помощника без дублирования кода, уже созданного Microsoft.
Спасибо за помощь, надеюсь увидеть результат.

Привет @andhdo , этот документ должен охватывать то, что вам нужно: https://github.com/microsoft/botframework-solutions/blob/next/docs/reference/skills/manualauthsteps.md

Откройте снова, если это необходимо.

Привет @andhdo , этот документ должен охватывать то, что вам нужно: https://github.com/microsoft/botframework-solutions/blob/next/docs/reference/skills/manualauthsteps.md

Откройте снова, если это необходимо.

Привет @ lauren-mills, не могли бы вы рассказать нам, как я могу снова открыть этот вопрос ?

что потому что:

  • Ваш ответ косвенно перенаправляет на ПРОГРАММНЫЙ ПУТЬ , уже упомянутый в вопросе,
  • таким образом, вы не используете механизм аутентификации, используемый VA в навыках: вы создаете новый.
  • это было проверено в машинописном тексте и не работает: (1: выполнение настройки регистрации бота, затем 2: добавление регистрации поставщика услуг aad с разрешениями графа API и 3: соотнесение регистрации бота с регистрацией aad предыдущего шаг и 4: добавление конфигурации appsettings). практически VA все еще работает без аутентификации после [указанных ручных шагов]
    (https://github.com/microsoft/botframework-solutions/blob/next/docs/reference/skills/manualauthsteps.md).
  • Я не хочу использовать навык, потому что это дополнительные расходы, которые будут заплачены за бота, который не собирается использовать другие предварительно созданные элементы; я просто хочу, чтобы помощник аутентифицировался в Azure AD. Насколько я знаю, когда вы создаете новый навык, вы можете активировать аутентификацию; почему бы не задокументировать эту стратегию, чтобы включить сценарий локальной аутентификации? Или, пожалуйста, уточните, можете ли вы использовать только программный способ добавления аутентификации в виртуального помощника. Спасибо

Шаги для добавления аутентификации непосредственно в VA должны быть такими же, как шаги для добавления их в навык, как указано в документе (поэтому я указал вам на него).

Я хочу подтвердить, что вы вносите все эти изменения в регистрацию виртуального бота и регистрацию виртуального приложения, верно?

Можете ли вы зайти в регистрацию бота на вкладке настроек, затем выбрать свое соединение OAuth и нажать «проверить соединение» вверху и сообщить мне, что там написано? Спасибо.

Да; все по процедуре. см. ниже выполненные шаги:

ШАГИ ДЛЯ ВОСПРОИЗВЕДЕНИЯ / ВИРТУАЛЬНЫЙ АССИСТЕНТ

установите все требования для запуска каркаса VA:

ПРЕДВАРИТЕЛЬНЫЕ ЗАПРОСЫ

npm uninstall -g yo
npm install -g yo
  • инструменты для сборки окон
npm install -g windows-build-tools
  • npm (обновить при необходимости)
npm install -g npm
  • затем установите реквизиты генератора
npm install -g botdispatch 
npm install -g ludown luis-apis qnamaker [email protected]
npm install -g chatdown
npm install -g botskills
  • установить генератор
npm uninstall -g generator-botbuilder-assistant
# select the following line according release or development versions you want to run. see https://github.com/microsoft/botframework-solutions#user-content-js table for versions
npm install -g generator-botbuilder-assistant 
  • выполнить генератор
yo botbuilder-assistant --assistantName "bot-1835" --assistantDesc "my assistant" --assistantLang "es,en" --assistantGenerationPath "." --noPrompt

затем началась генерация и сразу после нее процесс сборки.

  • затем исправляйте проблемы, если это необходимо для запуска приложений локально
    -> index.ts: опустить параметр учетных данных return new MultiProviderAuthDialog(oauthConnections) в разработке, основная версия;
    -> index.ts: изменить skill.msaAppId на skill.msAppId в разработке, основная версия
    -> добавить msAppId и атрибуты в файл skills.json.
    -> игнорировать ресурсы, автоматически сгенерированные в процессе сборки инструментами для создания ботов (кто управляет когнитивными моделями)

  • Предоставьте компоненты в Azure:
    позаботьтесь о том, чтобы у вас не было компонентов, которые вступают в конфликт с предоставленным кодом (удалите предыдущие группы ресурсов, модели azure-ad-registrations и luis.ai с одинаковым идентификатором с помощью инструментов консоли или командной строки).

сначала нужно установить соединение с azure, и выбрать подписку с деньгами (потому что в az все деньги)

az login 
az account set --subscription <SUBSCRIPTION_TO_WORK>

знак равно

а затем выполнение сгенерированного скрипта

cd bot-1835

.\deployment\scripts\deploy.ps1 -languages "es-es" -name "<VA_NAME>" -location "westus"  -appPassword "<VA_PASS>" -luisAuthoringRegion "westus" -luisAuthoringKey "<LUIS_AUTHORING_KEY>" -parametersFile ".\deployment\resources\parameters.template.json" -debug

VA_NAME:
ВА_ПАСС:
LUIS_AUTHORING_KEY: от

после этого (и скрестив пальцы чтобы все получилось), то можно приступать к понижению уровня дорогих для подписки ресурсов

вывод выглядит так:

> Creating resource group ...
> Validating Azure deployment ...
> Deploying Azure services (this could take a while)...
> Updating appsettings.json ...
> Deploying cognitive models ...
> Initializing dispatch model ...
> Parsing general LU file ...
> Deploying general LUIS app ...
> Setting LUIS subscription key ...
> Adding general app to dispatch model ...
> Parsing chitchat LU file ...
> Deploying chitchat QnA kb ...
> Adding chitchat kb to dispatch model ...
> Parsing faq LU file ...
> Deploying faq QnA kb ...
> Adding faq kb to dispatch model ...
> Creating dispatch model...
> Setting LUIS subscription key ...
+ To publish your bot, run 'C:\MyPathToDir\bot-1835\deployment\scripts\publish.ps1 -name 1835-dev1 -resourceGroup 1835-dev1 -projFolder "C:\MyPathToDir\bot-1835\src '
> Done.
  • запустить бота в локальном режиме:
npm run start

ШАГИ ДЛЯ ВОСПРОИЗВЕДЕНИЯ / АУТЕНТИФИКАЦИИ

  • создать регистрацию объявления Azure
$appReg2 = (az ad app create --display-name "<VA_AZADREG_NAME>" --password "<VA_AZADREG_PASS>" --available-to-other-tenants false --reply-urls "https://token.botframework.com/.auth/web/redirect")
$appReg2json = ($appReg2 | ConvertFrom-Json)

VA_AZADREG_NAME=
VA_AZADREG_PASS=

затем добавьте разрешения API графа

  • для: майкрософт граф
  • тип: делегированные разрешения
  • разрешения: (есть User.Read):
profile
Mail.Read
Mail.Send
User.Read
User.ReadBasic.All

а также

  • добавить неявные гранты для токенов id ([] AccessToken или [x] IDToken)
  • ключи записи предыдущего процесса
  • Идентификатор каталога (арендатора): (регистрация приложения/обзор)
  • Идентификатор приложения (клиента): (регистрация приложения/обзор)
  • секрет клиента:

  • используйтеthinfo из предыдущего шага, чтобы обновить oauth в созданной регистрации botchannels-registration

    • имя (имя_соединения): Outlook
    • сервис-провайдер: Azure Active Directory версии 2.
    • ID клиента:
    • секрет клиента:
    • ID арендатора:
    • области:
  • затем проверьте соединение
    (он запрашивает утверждения oauth), а затем показывает токен

Похоже, у вас есть настройка аутентификации в вашем проекте Virtual Assistant. Чего вам не хватает, с чем вам нужна наша помощь?

Несмотря на сделанную настройку, проект никогда не запрашивает аутентификацию у пользователя, использующего VA. Я уже добавил аутентификацию для проекта, но он никогда не активирует диалоги для аутентификации. Я уже добавил аутентификацию для проекта, но он никогда не активирует диалоги для аутентификации.

дополнительные шаги, сделанные в приложении в соответствии с документацией и ошибками, замеченными в kudu:

ШАГИ ДЛЯ ВОСПРОИЗВЕДЕНИЯ / АУТЕНТИФИКАЦИЯ-ПРИЛОЖЕНИЕ-ИЗМЕНЕНИЯ

  • добавьте конфигурацию oauth в файл appsettings.json, указав на политики oauth, объявленные на предыдущих шагах. восстановить msAppId и пароль, если ранее вы работали в локальном режиме.
{
  "oauthConnections": [
    {
      "name": "Outlook",
      "provider": "Azure Active Directory v2"
    }
  ], ...
  • измените package.json, чтобы отличить локальный запуск от действия запуска azure, или измените файл web.config, если это необходимо для успешного развертывания в azure.
  "local:start": "npm run build && node ./lib/index.js NODE_ENV=development",
  "start": "node ./lib/index.js",
  • опубликовать приложение-решение в Azure
npm run clean
npm run build
.\deployment\scripts\publish.ps1 -name <VA_NAME> -resourceGroup <VA_NAME>
  • создайте соединение с помощью эмулятора botframework для проверки аутентификации с помощью msAppId и msPwd

Чтобы запросить аутентификацию, вам нужно будет добавить OAuthPrompt в диалоговое окно в нужном месте, предоставив информацию о подключении при его настройке.

Этот образец диалогового окна из репозитория Microsoft/botbuilder-samples должен помочь: https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/18.bot-authentication/dialogs/mainDialog.js

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

  • это означает, что я должен вручную вызывать oauthPrompt на каждом шаге, который я хочу.

Некоторые дополнительные вопросы:

  • как я могу повторно использовать токен предыдущей аутентификации пользователя?
  • существует ли стратегия или шаблон обхода для добавления аутентификации перед выполнением любого вызова когнитивных служб? (предыдущая версия, похоже, имеет промежуточное ПО для аутентификации, но я не видел ничего подобного в версии 4)
  • Означает ли это, что уже созданный MultiProviderAuthDialog , который работает с навыками в методе buildAuthDialog в index.ts, не используется ни для каких целей.
  1. OAuthPrompt автоматически извлечет токен для пользователя, если он уже вошел в систему в другом месте для этого соединения OAuth. Если вы добавите OAuthPrompt туда, где хотите, и пользователь уже вошел в систему, он просто перейдет к следующему шагу.

  2. Я не уверен, что вы спрашиваете здесь. Для использования Cognitive Services (LUIS, QnA и т. д.) пользователь не должен проходить аутентификацию. Вам просто нужен ключ для этой службы. Пожалуйста, разъясните мне этот вопрос.

  3. Регистрация MultiProviderAuthDialog при запуске создается только для настроенных навыков в вашей конфигурации skills.json. Если навыков нет, он не используется.

2: я имею в виду: если существует (не знаю, существует ли уже или планируется ли) промежуточное ПО для запроса учетных данных аутентификации у пользователя, прежде чем предоставить доступ для выполнения логики запросов основного диалога, поэтому вы можете оставить эту логику нетронутой

Я думаю, что нашел решение в соответствии с вашими комментариями:

  • создайте диалоговое окно (здесь: LoginActivityDialog) для хранения логики запросов входа в систему. он получает информацию об oauth-соединениях из настроек, но его логика аналогична приведенному примеру . также наследуется от LogoutDialog
  • создайте своего рода диалог CircuitBreaker: диалог водопада из 2 шагов: шаг аутентификации и основной шаг. первый шаг вызывает loginActivityDialog, а второй вызывает ранее сгенерированный главный диалог только в том случае, если oauthPrompt сгенерировал токен.

  • в index.ts сделайте что-то похожее на логику buildAuthDialog , чтобы получить конфигурацию oauthConnection из настроек и обойти LoginActivityDialog

/* eslint-disable */
function buildAuthDialog2(settings: Partial<IBotSettings>): LoginActivityDialog|undefined {

    const oauthConnections: IOAuthConnection[] | undefined = botSettings.oauthConnections;
    if(oauthConnections!==undefined) {
        const loginDialog = new LoginActivityDialog(oauthConnections);
        console.log(`created`);
        return loginDialog;
    } else {
        throw new Error(`You must configure at least one supported OAuth connection to use authentication`);
    }
    return undefined;
};
/* eslint-enable */

это менее инвазивный метод, который я нашел до сих пор; однако ему не хватает двух вещей: (1) он не может распространять токен для графа вызовов, если это необходимо. (2) я думал, что это не оригинальное промежуточное ПО

Рад слышать, что вы смогли заставить работать подсказку. Для доступа к токену он должен быть доступен на следующем шаге (после OAuthPrompt) в stepContext.Result.

Если вам нужен совет по созданию нужного промежуточного программного обеспечения, я бы посоветовал перейти к нашему Stack Overflow , так как он лучше подходит для общих советов по ботам, чем этот репозиторий.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги