Добавление проверки подлинности в бот

ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4

Пакет SDK azure AI Служба Bot версии 4 упрощает разработку ботов, которые могут получать доступ к интернет-ресурсам, для которых требуется проверка подлинности пользователей. Боту не нужно управлять маркерами проверки подлинности, так как Azure делает это для вас с помощью OAuth 2.0 для создания маркера на основе учетных данных каждого пользователя. Бот будет использовать маркеры, созданные в Azure, для доступа к нужным ресурсам. Таким образом, пользователю не нужно предоставлять идентификатор и пароль боту для доступа к защищенному ресурсу, но только доверенному поставщику удостоверений.

Общие сведения о том, как Bot Framework обрабатывает эту проверку подлинности, см. в разделе "Проверка подлинности пользователей".

Эта статья содержит ссылки на два примера. Один из них демонстрирует, как получить маркер проверки подлинности. Другой является более сложным и показывает, как получить доступ к Microsoft Graph от имени пользователя. В обоих случаях azure AD версии 1 или версии 2 можно использовать в качестве поставщика удостоверений для получения маркера OAuth для бота. В этой статье рассматриваются следующие вопросы:

  • Создание ресурса Azure Bot
  • Создание поставщика удостоверений Идентификатора Microsoft Entra
  • Регистрация поставщика удостоверений идентификатора Microsoft Entra в боте
  • Подготовка кода бота

После завершения этой статьи у вас будет бот, который может отвечать на несколько простых задач. В примере Microsoft Graph вы можете отправить сообщение электронной почты, отобразить его и проверка последние сообщения электронной почты. Не нужно публиковать бота для тестирования функций OAuth; Однако боту потребуется действительный идентификатор приложения Azure и пароль.

Примечание.

Пакеты SDK для JavaScript, C# и Python для Bot Framework по-прежнему будут поддерживаться, однако пакет SDK java отменяется с окончательной долгосрочной поддержкой, заканчивающейся в ноябре 2023 года. В этом репозитории будут выполняться только критически важные исправления безопасности и ошибок.

Существующие боты, созданные с помощью пакета SDK для Java, будут продолжать функционировать.

Для создания нового бота рекомендуется использовать Power Virtual Agent и ознакомиться с выбором подходящего решения чат-бота.

Дополнительные сведения см. в статье "Будущее создания бота".

Рекомендации по веб-чатам и Direct Line

Важно!

Для устранения рисков безопасности при подключении к боту с помощью элемента управления Веб-чат необходимо использовать Прямую линию с расширенной проверкой подлинности. Дополнительные сведения см. в разделе "Расширенная проверка подлинности Direct Line".

Необходимые компоненты

  • Понимание принципов работы ботов, управления состоянием, использования библиотек диалогов, реализации последовательного процесса общения, а также повторного использования диалогов.

  • Понимание процессов разработки для Azure и OAuth 2.0.

  • Visual Studio 2017 или более поздней версии для платформы .NET.

  • Node.js для JavaScript.

  • Python 3.8+ для Python.

  • Один из перечисленных ниже примеров.

    Пример Версия Bot Builder Что демонстрирует
    Проверка подлинности в C# или JavaScript или Java или Python версия 4 Поддержка OAuthCard
    Проверка подлинности для Microsoft Graph в C# или JavaScript или Java или Python версия 4 Поддержка API Microsoft Graph с OAuth 2.0
    Проверка подлинности для Microsoft Teams в C# или JavaScript или Java или Python версия 4 Поддержка API Microsoft Graph с OAuth 2.0

    Чтобы запустить примеры, указанные в этой статье, вам потребуется:

    • Приложение идентификатора Microsoft Entra ID, с помощью которого необходимо зарегистрировать ресурс бота в Azure. Это приложение позволяет боту обращаться к внешнему защищенному ресурсу, например Microsoft Graph. Также оно позволяет пользователю взаимодействовать с ботом через несколько каналов, таких как Web Chat.
    • Отдельное приложение идентификатора Microsoft Entra, которое будет функционировать в качестве поставщика удостоверений. Это приложение предоставит учетные данные, необходимые для установки соединения OAuth между ботом и защищенным ресурсом. Обратите внимание, что в этой статье в качестве поставщика удостоверений используется Active Directory. Поддерживаются и другие поставщики.

Важно!

При регистрации бота в Azure он назначается приложению Идентификатора Microsoft Entra. Но это приложение защищает доступ из канала к боту. Вам потребуется дополнительное приложение идентификатора Microsoft Entra для каждого внешнего защищенного ресурса, к которому бот должен получить доступ от имени пользователя.

Создание ресурса

Создайте ресурс Azure Bot, который позволит зарегистрировать бота в Служба Bot Azure AI.

Совет

Новые ресурсы регистрации каналов веб-приложения ибота не могут быть созданы. Однако все существующие ресурсы, настроенные и развернутые, будут продолжать работать. Боты, созданные из шаблона VSIX или Yeoman из пакета SDK версии 4.14.1.2 или более поздней, содержат шаблоны ARM, которые будут создавать ресурс Azure Bot.

  1. Переход на портал Azure.

  2. В правой области выберите "Создать ресурс".

  3. В поле поиска введите bot, а затем нажмите клавишу ВВОД.

  4. Выберите карта Azure Bot.

    Select Azure bot resource

  5. Нажмите кнопку создания.

  6. Введите значения в обязательных полях и проверьте и обновите параметры.

    1. Укажите сведения в разделе "Сведения о проекте". Выберите, будет ли бот иметь глобальное или локальное расположение данных. В настоящее время функция расположения локальных данных доступна для ресурсов в регионе "westeurope" и "centralindia". Дополнительные сведения см. в разделе "Регионизация" в azure AI Служба Bot.

      The project details settings for an Azure Bot resource

    2. Укажите сведения в разделе идентификатора приложения Майкрософт. Выберите способ управления удостоверением бота в Azure и создание нового удостоверения или использование существующего.

      The Microsoft app ID settings for an Azure Bot resource

  7. Выберите Review + create (Просмотреть и создать).

  8. Если проверка проходит, нажмите кнопку "Создать".

  9. После завершения развертывания выберите "Перейти к ресурсу". Вы увидите бота и связанные ресурсы, перечисленные в выбранной группе ресурсов.

  10. Если у вас еще нет пакета SDK Bot Framework, выберите "Скачать" из GitHub , чтобы узнать, как использовать пакеты для предпочитаемого языка.

    Create bot in SDK

Теперь вы готовы к созданию бота с помощью пакета SDK Bot Framework.

Совет

При создании ресурса Azure с одним клиентом или несколькими клиентами Azure Bot с новым идентификатором приложения он также создает пароль.

Сведения об удостоверениях бота

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

Важно!

Версии пакета SDK Bot Framework для Java и Python поддерживают только многотенантные боты. Версии C# и JavaScript поддерживают все три типа приложений для управления удостоверением бота.

Язык Имя файла Примечания.
C# appsettings.json Поддерживает все три типа приложений для управления удостоверениями бота.
JavaScript env. Поддерживает все три типа приложений для управления удостоверениями бота.
Java application.properties Поддерживает только многотенантные боты.
Python config.py Поддерживает только многотенантные боты. Укажите свойства удостоверения в качестве аргументов для вызовов os.environ.get метода.

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

Доступно только для ботов C# и JavaScript.

Свойство Значение
MicrosoftAppType UserAssignedMSI
MicrosoftAppId Идентификатор клиента управляемого удостоверения, назначаемого пользователем.
MicrosoftAppPassword Неприменимо. Оставьте это пустым для бота управляемого удостоверения, назначаемого пользователем.
MicrosoftAppTenantId Идентификатор клиента управляемого удостоверения, назначаемого пользователем.

Обновление службы приложений

Если у вас есть существующий ресурс Служба приложений (веб-приложение) для бота, а бот — это приложение управляемого удостоверения, назначаемое пользователем, может потребоваться обновить службу приложений бота:

  1. Перейдите в колонку Служба приложений для веб-приложения бота.
  2. В разделе Параметры выберите пункт Удостоверение.
  3. В колонке "Удостоверение" выберите вкладку "Назначаемый пользователем" и "Добавить " (+).
  4. В колонке "Добавление назначаемого пользователем управляемого удостоверения ":
    1. Выберите свою подписку.

    2. Для управляемых удостоверений, назначенных пользователем, выберите управляемое удостоверение для бота. Если управляемое удостоверение было автоматически создано для вас, оно будет иметь то же имя, что и бот.

    3. Выберите "Добавить ", чтобы использовать это удостоверение для бота.

      The App Service Identity blade with the managed identity for the bot selected.

Получение идентификатора приложения или клиента

Чтобы получить идентификатор приложения или клиента бота:

  1. Перейдите в колонку ресурсов Azure Bot для бота.
  2. Перейдите в колонку конфигурации бота. В этой колонке можно скопировать идентификатор приложения Майкрософт или идентификатор клиента приложения бота.

Создание нового пароля

Боты с одним клиентом и несколькими клиентами имеют секрет приложения или пароль, необходимый для некоторых операций. Azure AI Служба Bot скрывает секрет бота. Однако владелец ресурса Служба приложений бота может создать новый пароль:

  1. Перейдите в колонку ресурсов Azure Bot для бота.
  2. Перейдите в колонку конфигурации бота.
  3. Выберите "Управление", рядом с идентификатором приложения Майкрософт, чтобы перейти в колонку "Сертификаты и секреты " для службы приложений.
  4. Следуйте инструкциям в колонке, чтобы создать новый секрет клиента и записать значение в безопасном месте.

Служба удостоверений идентификатора Microsoft Entra

Идентификатор Microsoft Entra — это облачная служба удостоверений, которая позволяет создавать приложения, безопасные для входа пользователей с помощью стандартных отраслевых протоколов, таких как OAuth 2.0.

Вы можете выбрать одну из двух служб идентификации:

  1. Платформа разработчика Идентификатора Microsoft Entra (версия 1.0). Это конечная точка AAD версии 1, которая позволяет создавать приложения с поддержкой безопасного входа пользователей с рабочей или учебной учетной записью Майкрософт. Дополнительные сведения см. в обзоре идентификатора Microsoft Entra для разработчиков (версии 1.0).
  2. Платформа удостоверений Майкрософт (версия 2.0) Также известная как конечная точка идентификатора Microsoft Entra ID , которая является эволюцией платформы Azure AD (версия 1.0). С ее помощью вы можете создавать приложения, которые поддерживают вход через любых поставщиков удостоверений Майкрософт и получение токенов для вызова таких программных API Майкрософт, как API Microsoft Graph или других API, созданных разработчиками. Дополнительные сведения см. в обзоре платформа удостоверений Майкрософт (версии 2.0).

См. сведения о различиях между конечными точками версий 1 и 2 в статье Зачем выполнять обновление до платформы удостоверений Майкрософт (версия 2.0)? Полные сведения см. в разделе платформа удостоверений Майкрософт (прежнее название — идентификатор Microsoft Entra для разработчиков).

Создание поставщика удостоверений Идентификатора Microsoft Entra

В этом разделе показано, как создать поставщик удостоверений Идентификатора Microsoft Entra, использующий OAuth 2.0 для проверки подлинности бота. Можно использовать конечные точки идентификатора Azure AD версии 1 или Microsoft Entra ID.

Совет

Вам потребуется создать и зарегистрировать приложение идентификатора Microsoft Entra в клиенте, в котором можно предоставить согласие на делегирование разрешений, запрошенных приложением.

  1. Откройте панель идентификатора Microsoft Entra в портал Azure. Если вы не в правильном клиенте, выберите "Переключить каталог ", чтобы переключиться на правильный клиент. (Сведения о создании клиента см. в разделе .Доступ к порталу и создание клиента.)

  2. Откройте панель Регистрация приложений.

  3. На панели Регистрация приложений выберите "Создать регистрацию".

  4. Заполните обязательные поля и создайте регистрацию приложения.

    1. Присвойте имя приложению.

    2. Выберите Поддерживаемые типы учетных записей для приложения. (Все эти параметры будут работать с этим примером.)

    3. Для URI перенаправления выберите веб-адрес и задайте URL-адрес для одного из поддерживаемых URL-адресов перенаправления OAuth.

    4. Выберите Зарегистрировать.

      • После создания Azure отображает страницу обзора для приложения.
      • Запишите идентификатор приложения (клиента). Это значение будет использоваться позже в качестве идентификатора клиента при создании строка подключения и регистрации поставщика идентификатора Microsoft Entra с регистрацией бота.
      • Запишите значение идентификатора каталога (клиента). Это значение будет использоваться для регистрации этого приложения поставщика в боте.
  5. В области навигации выберите сертификаты и секреты , чтобы создать секрет для приложения.

    1. В разделе Секреты клиента выберите Новый секрет клиента.
    2. Добавьте описание, чтобы отличать этот секрет от других секретов, которые могут вам понадобиться для создания этого приложения, включая bot login.
    3. Для истечения срока действия выберите период времени, после которого срок действия секрета истекает.
    4. Выберите Добавить.
    5. Перед выходом из секретов и сертификатов запишите секрет. Это значение будет использоваться позже в качестве секрета клиента при регистрации приложения Идентификатора Microsoft Entra в боте.
  6. В области навигации выберите разрешения API, чтобы открыть панель разрешений API. Рекомендуется явно задать разрешения API для приложения.

    1. Выберите " Добавить разрешение", чтобы отобразить область разрешений API запроса.

    2. Для этого примера выберите API Microsoft и Microsoft Graph.

    3. Выберите Делегированные разрешения и убедитесь, что выбраны все разрешения, требуемые для этого примера.

      Примечание.

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

      • openid
      • profile
      • Mail.Read
      • Mail.Send
      • User.Read
      • User.ReadBasic.All
    4. Выберите Добавить разрешения. (При первом доступе пользователя к этому приложению через бот он должен предоставить согласие.)

Теперь у вас настроено приложение идентификатора Microsoft Entra.

Примечание.

Вы назначите идентификатор приложения (клиента) и секрет клиента при создании строка подключения и регистрации поставщика удостоверений в регистрации бота. Ознакомьтесь со следующим разделом.

Регистрация поставщика удостоверений идентификатора Microsoft Entra в боте

Следующим шагом является регистрация поставщика удостоверений в боте.

  1. Откройте страницу ресурсов Azure Bot бота в портал Azure.

  2. Выберите Параметры.

  3. В разделе Подключение OAuth Параметры в нижней части страницы нажмите кнопку "Добавить параметр".

  4. Заполните форму следующим образом.

    1. Имя. Введите имя для подключения. которое было использовано в коде бота.

    2. Поставщик услуг. Выберите идентификатор Microsoft Entra, чтобы отобразить поля, относящиеся к идентификатору Microsoft Entra.

    3. Идентификатор клиента. Введите идентификатор приложения (клиента), записанный для поставщика удостоверений Идентификатора Microsoft Entra.

    4. Секрет клиента. Введите секрет, записанный для поставщика удостоверений Идентификатора Microsoft Entra.

      Совет

      Если вы хотите использовать сертификаты, можно выбрать AAD версии 2 с поставщиком сертификатов . Вам потребуется предоставить хранилище токенов Служба Bot (appid: 5b404cf4-a79d-4cfe-b866-24bf8e1a4921) разрешение на получение сертификата.

    5. URL-адрес Exchange токена. Оставьте его пустым, так как он используется только для единого входа в идентификаторе Microsoft Entra ID.

    6. Идентификатор клиента. Введите идентификатор каталога (клиента), записанный ранее для приложения идентификатора Microsoft Entra ID или распространенных в зависимости от поддерживаемых типов учетных записей, выбранных при создании приложения Azure DD. Чтобы решить, какое значение следует назначить, выполните следующие критерии:

      • При создании приложения идентификатора Microsoft Entra ID, если вы выбрали учетные записи только в этом каталоге организации (только Майкрософт — один клиент), введите идентификатор клиента, записанный ранее для приложения Идентификатора Microsoft Entra.
      • Однако если вы выбрали учетные записи в любом каталоге организации (любой каталог идентификатора Microsoft Entra — мультитенантные и личные учетные записи Майкрософт, например Xbox, Outlook.com) или учетные записи в любом каталоге организации (каталог Microsoft Entra ID — Мультитенант), введите common вместо идентификатора клиента. В противном случае приложение Идентификатора Microsoft Entra проверяется с помощью клиента, идентификатор которого выбран и исключен личные учетные записи Майкрософт.

      Данный клиент будет связан с пользователями, которые могут пройти проверку подлинности. Дополнительные сведения см. в разделе "Клиентство" в идентификаторе Microsoft Entra.

    7. В области введите имена разрешения, выбранного в регистрации приложения. Для тестирования можно просто ввести: openid profile

      Примечание.

      Для идентификатора Microsoft Entra поле "Области " принимает регистр, разделенный пробелами список значений.

  5. Выберите Сохранить.

Примечание.

Используя API Microsoft Graph, эти значения позволяют приложению получать доступ к данным Office 365. Кроме того, URL-адрес Exchange токенов должен оставаться пустым, так как он используется только для единого входа в идентификаторе Microsoft Entra.

Проверьте подключение

  1. Выберите запись подключения, чтобы открыть созданное соединение.
  2. Выберите "Тестировать Подключение" в верхней части области параметров поставщика услуг Подключение ion.
  3. При выполнении данного действия в первый раз должна открыться новая вкладка браузера с перечисленными разрешениями, которые запрашивает приложение, и предложение их принять.
  4. Выберите Принять.
  5. Затем необходимо перенаправить вас на страницу "Тестовый Подключение" на <страницу "Успешное подключение>".

Для получения токенов пользователя можно использовать имя этого подключения в коде бота.

Подготовка кода бота

Чтобы завершить этот процесс, вам потребуется идентификатор приложения бота и пароль.

  1. Клонируйте из репозитория GitHub пример, с которым вы хотите работать: проверка подлинности бота или проверка подлинности бота для Microsoft Graph.

  2. Обновите файл appsettings.json:

    • параметру ConnectionName присвойте значение имени подключения OAuth, которое вы добавили в бот;

    • параметрам MicrosoftAppId и MicrosoftAppPassword присвойте значения идентификатора приложения бота и секрета приложения.

      В зависимости от символов, из которых состоит секрет бота, может потребоваться XML-экранирование пароля. Например, символ амперсанда (&) потребуется кодировать как &amp;.

    {
      "MicrosoftAppType": "",
      "MicrosoftAppId": "",
      "MicrosoftAppPassword": "",
      "MicrosoftAppTenantId": "",
      "ConnectionName": ""
    }
    

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

    "OAuthUrl": "<Regional-OAuth-Uri>",
    "ToChannelFromBotOAuthScope": "https://api.botframework.com",
    "ToChannelFromBotLoginUrlTemplate": "https://api.botframework.com",
    "PublicAzureChannel": "https://api.botframework.com",
    "ToBotFromChannelOpenIdMetadataUrl": "https://login.botframework.com/v1/.well-known/openidconfiguration",
    "ToBotFromEmulatorOpenIdMetadataUrl": "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration",
    "ToBotFromChannelTokenIssuer": "https://api.botframework.com",
    "ToChannelFromBotLoginUrl": "https://login.microsoftonline.com/botframework.com",
    

    Где <регион-OAuth-URL> является одним из следующих URI:

    URI-адрес Description
    https://europe.api.botframework.com Для общедоступных облачных ботов с размещением данных в Европе.
    https://unitedstates.api.botframework.com Для общедоступных облачных ботов с размещением данных в США.
    https://india.api.botframework.com Для общедоступных облачных ботов с размещением данных в Индии.
  3. Обновление Startup.cs:

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

    string uri = "<uri-to-use>";
    MicrosoftAppCredentials.TrustServiceUrl(uri);
    OAuthClientConfig.OAuthEndpoint = uri;
    
    

    Где <универсальный код ресурса (URI)> является одним из следующих URI:

    URI-адрес Description
    https://api.botframework.azure.us Для США правительственных облачных ботов без расположения данных.
    https://api.botframework.com Для общедоступных облачных ботов без расположения данных. Это универсальный код ресурса (URI) по умолчанию и не требует изменения в Startup.cs.

Чтобы получить идентификатор приложения Майкрософт и значения пароля приложения Майкрософт, см. раздел "Получить пароль регистрации".

Примечание.

Теперь вы можете опубликовать этот код бота в подписке Azure (щелкните правой кнопкой мыши проект и выберите "Опубликовать"), но для этой статьи не требуется. Вам нужно настроить конфигурацию публикации, которая использует план приложения и размещения, с помощью которого выполнялась настройка бота на портале Azure.

Тестирование бота с помощью эмулятора

Если это еще не сделано, установите эмулятор Bot Framework. См. также отладку с помощью эмулятора.

Чтобы пример входа бота работал, необходимо настроить эмулятор, как показано в разделе "Настройка эмулятора для проверки подлинности".

Тестирование

После настройки механизма проверки подлинности можно выполнить фактическое тестирование примера бота.

Примечание.

Возможно, вам будет предложено ввести магический код, так как реализуется пример бота. Этот магический код рассматривается в документе RFC#7636 и предназначен для добавления дополнительного элемента безопасности. При удалении магического кода возникает повышенный риск безопасности. Это можно устранить с помощью Direct Line с включенной расширенной проверкой подлинности. Дополнительные сведения см. в статье о расширенной проверке подлинности Bot Framework.

  1. Запустите пример бота на локальном компьютере.
  2. Запустите эмулятор Bot Framework.
  3. При подключении к боту необходимо указать идентификатор приложения бота и пароль.
    • Идентификатор приложения и пароль можно получить в области регистрации приложений Azure. Это те же значения, которые вы назначили боту в файле appsettings.json или .env. В эмуляторе эти значения назначаются в файле конфигурации или при первом подключении к боту.
    • Вы также можете экранировать пароль (XML) в коде бота.
  4. Чтобы просмотреть список доступных команд для бота и проверить функции проверки подлинности, введите help.
  5. После выполнения входа и до момента выхода не требуется повторно предоставлять учетные данные.
  6. Чтобы выйти и отменить проверку подлинности, введите logout.

Примечание.

Для проверки подлинности бота требуется использование службы бота Подключение or. Служба получает доступ к данным из ресурса Azure Bot.

Пример проверки подлинности

В примере Аутентификация бота диалог получает маркер пользователя после входа пользователя в систему.

Sample conversation with the authentication sample bot.

Пример проверки подлинности для Microsoft Graph

В примере проверки подлинности Бота для Microsoft Graph диалоговое окно предназначено для принятия ограниченного набора команд после входа пользователя.

Sample conversation with the Microsoft Graph authentication sample bot.


Дополнительная информация:

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

  1. Проверка наличия маркера для текущего пользователя и подключения Служба Bot Azure AI. Если есть маркер, возвращается маркер.
  2. Если в azure AI Служба Bot нет кэшированного токена, создается кнопка входа, OAuthCard которую пользователь может выбрать.
  3. После нажатия OAuthCard кнопки входа azure AI Служба Bot отправить бот маркера пользователя напрямую или представить пользователю код проверки подлинности с 6 цифрами, чтобы войти в окно чата.
  4. Если пользователю предоставлен код аутентификации, бот позднее обменивает этот код на маркер пользователя.

В следующих разделах объясняется, как этот пример реализует некоторые распространенные задачи проверки подлинности.

Использование запроса OAuth для входа пользователя и получения маркера

Architecture diagram for the C# sample.

Dialogs\MainDialog.cs

Добавьте запрос OAuth в MainDialog с помощью конструктора. Здесь мы получаем значение имени подключения из файла appsettings.json.

AddDialog(new OAuthPrompt(
    nameof(OAuthPrompt),
    new OAuthPromptSettings
    {
        ConnectionName = ConnectionName,
        Text = "Please Sign In",
        Title = "Sign In",
        Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
    }));

В шаге диалога укажите BeginDialogAsync для запуска командной строки OAuth, в которой пользователю будет предложено войти в систему.

  • Если пользователь уже выполнил вход, будет создано событие ответа маркера без подтверждения пользователя.
  • В противном случае пользователю будет предложено войти в систему. Azure AI Служба Bot отправляет событие ответа маркера после попытки входа пользователя.
return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken);

В следующем шаге диалога проверьте наличие маркера в результате, полученном от предыдущего шага. Если он не имеет значения NULL, пользователь успешно вошел в систему.

// Get the token from the previous step. Note that we could also have gotten the
// token directly from the prompt itself. There is an example of this in the next method.
var tokenResponse = (TokenResponse)stepContext.Result;

Ожидание метода TokenResponseEvent

Когда вы запускаете командную строку OAuth, она ожидает события получения маркера, из которого затем извлекает маркер пользователя.

Bots\AuthBot.cs

AuthBot наследуется от ActivityHandler и явным образом обрабатывает действия ответа маркера. Здесь мы продолжаем активный диалог, что позволяет командной строке OAuth обработать событие и получить маркер.

protected override async Task OnTokenResponseEventAsync(ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
    Logger.LogInformation("Running dialog with Token Response Event Activity.");

    // Run the Dialog with the new Token Response Event Activity.
    await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}

Выход пользователя

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

Dialogs\LogoutDialog.cs

private async Task<DialogTurnResult> InterruptAsync(DialogContext innerDc, CancellationToken cancellationToken = default(CancellationToken))
{
    if (innerDc.Context.Activity.Type == ActivityTypes.Message)
    {
        var text = innerDc.Context.Activity.Text.ToLowerInvariant();

        if (text == "logout")
        {
            // The UserTokenClient encapsulates the authentication processes.
            var userTokenClient = innerDc.Context.TurnState.Get<UserTokenClient>();
            await userTokenClient.SignOutUserAsync(innerDc.Context.Activity.From.Id, ConnectionName, innerDc.Context.Activity.ChannelId, cancellationToken).ConfigureAwait(false);

            await innerDc.Context.SendActivityAsync(MessageFactory.Text("You have been signed out."), cancellationToken);
            return await innerDc.CancelAllDialogsAsync(cancellationToken);
        }
    }

    return null;
}

Добавление аутентификации Teams

OAuth обрабатывается иначе в Teams, чем в других каналах. Пример бота проверки подлинности Teams (в C#, JavaScript, Java или Python) демонстрирует, как правильно реализовать проверку подлинности для Teams.

Дополнительные материалы