Поделиться через


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

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

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

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

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

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

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

Примечание.

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

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

Для создания нового бота рекомендуется использовать Microsoft Copilot Studio и ознакомиться с выбором подходящего copilot решения.

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

Рекомендации по Web Chat и Direct Line

Внимание

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

Предварительные условия

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

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

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

  • Node.js для JavaScript.

  • Python 3.8+ для Python.

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

    Пример Версия BotBuilder Демонстрирует
    Проверка подлинности в 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 ID, которое будет функционировать в качестве поставщика удостоверений. Это приложение предоставит учетные данные, необходимые для установки соединения OAuth между ботом и защищенным ресурсом. Обратите внимание, что в этой статье в качестве идентификационного провайдера используется Active Directory. Поддерживаются и другие поставщики.

Внимание

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

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

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

Совет

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

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

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

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

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

    Выбор ресурса бота Azure

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

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

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

      Параметры сведений о проекте для ресурса Azure Bot

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

      Параметры идентификатора приложения Майкрософт для ресурса Azure Bot

  7. Выберите Просмотреть и создать.

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

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

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

    Создание бота в пакете SDK

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

Совет

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

Информация об идентификации бота

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

Внимание

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

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

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

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

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

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

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

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

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

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

      Панель удостоверений службы приложений с управляемым удостоверением для выбранного бота.

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

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

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

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

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

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

Служба идентификации Microsoft Entra ID

Идентификатор 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 ID

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

Совет

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

  1. Откройте панель Microsoft Entra ID в портале 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 ID в боте.
  6. В области навигации выберите разрешения API, чтобы открыть панель разрешений API. Рекомендуется явно задать разрешения API для приложения.

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

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

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

      Примечание.

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

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

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

Примечание.

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

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

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

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

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

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

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

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

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

    3. Client id. Введите идентификатор приложения (клиента), сохраненный для вашего поставщика удостоверений Microsoft Entra ID.

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

      Совет

      Если вы хотите использовать сертификаты, вы можете выбрать поставщика AAD v2 with Certificates. Вам потребуется предоставить Службе Bot хранилище токенов (appid: 00001111-aaaa-2222-bbbb-3333cccc4444) разрешение на получение сертификата.

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

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

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

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

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

      Примечание.

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

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

Примечание.

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

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

  1. Выберите запись подключения, чтобы открыть созданное вами соединение.
  2. Выберите "Проверить подключение" в верхней части панели параметров подключения поставщика услуг.
  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",
    

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

    URI Описание
    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-to-use> — один из следующих URI:

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

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

Примечание.

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

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

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

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

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

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

Примечание.

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

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

Примечание.

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

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

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

Пример беседы с ботом-аутентификации.

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

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

Пример беседы с ботом, демонстрирующим аутентификацию Microsoft Graph.


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

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

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

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

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

Схема архитектуры для примера C#.

Диалоговые окна\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);
}

Выйти из системы

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

Диалоговые окна\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.

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

  • Дополнительные ресурсы Bot Framework содержат ряд ссылок с сопроводительной информацией.
  • Репозиторий Bot Framework SDK содержит информацию о репозиториях, примерах, средствах и спецификациях, связанных с пакетом SDK Bot Builder.