Сведения о едином входе

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

Единый вход (единый вход) позволяет предоставлять доступ к ресурсам в независимых приложениях. Например, пользователь может войти в службу в корневом боте, а корневой бот может предоставить общий доступ к маркеру доступа с помощью бота навыка. В настоящее время поддерживается только поставщик удостоверений Идентификатора Microsoft Entra.

Единый вход используется в следующих сценариях:

  • Корневой бот и один или несколько ботов навыка. Пользователь входит из корневого бота. Затем бот вызывает несколько навыков от имени пользователя.
  • Элемент управления Веб-чат, внедренный на веб-сайт. Пользователь входит на веб-сайт. Затем веб-сайт вызывает бот или навык от имени пользователя.

Единый вход обеспечивает следующие преимущества:

  • Пользователю не нужно выполнять вход несколько раз.
  • Корневой бот или веб-сайт не должен знать разрешения пользователя.

Примечание.

Единый вход доступен в пакете SDK Bot Framework версии 4.8 и более поздних версий.

Взаимодействие компонентов единого входа

На следующих схемах потоков показано взаимодействие между компонентами единого входа.

  • На следующей схеме показан поток для корневого бота.

    SSO sequence diagram for a root bot.

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

    SSO sequence diagram for a Web Chat control.

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

Давайте проанализируем этот поток.

  1. Клиент начинает беседу с ботом, активируя сценарий OAuth.

  2. Бот отправляет этому клиенту карту OAuth.

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

  4. Если свойство существует, клиент отправляет боту TokenExchangeInvokeRequest . Клиент должен иметь обменный токен для пользователя, который должен быть маркером идентификатора Microsoft Entra и аудиторией которого должно быть то же самое, что TokenExchangeResource.Uri и свойство. Клиент отправляет в бот действие Invoke с текстом, как показано ниже.

    {
        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": {
            "id": "<any unique ID>",
            "connectionName": "<connection Name on the skill bot (from the OAuth Card)>",
            "token": "<exchangeable token>"
        }
    }
    
  5. Бот обрабатывает TokenExchangeInvokeRequest и возвращает клиенту TokenExchangeInvokeResponse. Клиент должен ждать, пока он не получит TokenExchangeInvokeResponse.

    {
        "status": "<response code>",
        "body": {
            "id":"<unique ID>",
            "connectionName": "<connection Name on the skill bot (from the OAuth Card)>",
            "failureDetail": "<failure reason if status code isn't 200, null otherwise>"
        }
    }
    
  6. TokenExchangeInvokeResponse Если имеет значение status200, клиент не отображает карта OAuth. См. схему обычного потока. Для любого другого status или если TokenExchangeInvokeResponse он не получен, клиент отображает карта OAuth пользователю. См. схему резервного потока. Это гарантирует, что поток единого входа возвращается к обычному потоку OAuthCard, если возникают ошибки или несметные зависимости, например согласие пользователя.

Следующие шаги