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


Добавление кода для включения единого входа для универсальных действий адаптивных карточек

Действия по проверке подлинности для единого входа похожи на действия бота в Teams. Ниже приведены шаги по достижению единого входа в Adaptive Cards Universal Action.

Примечание.

Чтобы реализовать поток единого входа, вам потребуется единый чат, объявленный для бота в манифесте приложения. Когда пользователь приложения вызывает поток единого входа по протоколу Adaptive CardAction.Execute, появляется запрос, позволяющий пользователю приложения установить приложение в личной область, если он не установил его.

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

Убедитесь, что бот настроен в Microsoft Entra ID для получения маркера доступа. Вы можете обновить код для обработки маркера доступа для универсальных действий адаптивных карточек в боте.

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

{
"statusCode": 401,
"type": "application/vnd.microsoft.activity.loginRequest",
"value": {
   "text": "Please sign-in",
   "connectionName": "<configured-connection-name>",
   "tokenExchangeResource": {
      "id": "<unique-indentifier>",
      "uri": "<application-or-resource-identifier>",
      "providerId": "<optional-provider-identifier>"
   },
   "buttons": [
      {
      "title": "Sign-In",
         "text": "Sign-In",
         "type": "signin",
         "value": "<sign-in-URL>"
      }
   ]
}
}

Служба бота доставляет ответ на вызов клиенту Teams, который использует tokenExchangeResource значение и маркер клиента Teams для получения токена on-behalf-of или токена обмена из Microsoft Entra ID.

Сбой единого входа, если клиент Teams по какой-либо причине игнорирует tokenExchangeResource значение, включая недопустимые значения, ошибки при получении обменных токенов или если Microsoft Entra ID не поддерживает значение. Затем клиент Teams активирует поток номинального входа или OAuth. Рекомендуется указать URL-адрес входа в ответ, чтобы поток OAuth работал.

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

Снимок экрана: диалоговое окно согласия.

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

Добавление кода для получения маркера

  1. Клиент Teams снова отправляет исходный код adaptiveCard/action боту вместе с маркером следующим образом:

    {
    "type": "invoke",
    "name": "adaptiveCard/action"
    "value": {
    "action": {
       "id": "abc123",
       "type": "Action.Execute",
       "verb": "saveCommand",
       "data": {
          "firstName": "Jeff",
          "lastName": "Derstadt"
       }
    },
    "authentication": {
       "id": "8769-xyz",
       "connectionName": "oauthConnection",
       "token": "...single sign-on token..."
    }
    }
    }
    

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

            protected override async Task<InvokeResponse> OnInvokeActivityAsync(ITurnContext<IInvokeActivity> turnContext, 
         CancellationToken cancellationToken)
            {
              JObject value = JsonConvert.DeserializeObject<JObject>
              (turnContext.Activity.Value.ToString());
              JObject authentication = null;
              if (value["authentication"] != null)
              {
              authentication = JsonConvert.DeserializeObject<JObject>(value["authentication"].ToString());
              }
            }
    
  2. Клиент Teams отправляет боту запрос на вызов. Бот получает согласие пользователей приложения и использует их удостоверение, чтобы помочь в обмене маркерами со службой маркеров платформы ботов и Microsoft Entra ID. Служба маркеров платформы бота предоставляет боту маркер доступа пользователей приложения.

    • Служба бота игнорирует маркер доступа, если значение неверно.

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

       {
        "statusCode" = 412,
        "type" = "application/vnd.microsoft.error.preconditionFailed",
        "value" = {
          "code" = "412",
          "message" = "authentication token expired"    }
          }
      
    • При сбое единого входа клиент Teams отображает кнопку входа в нижнем колонтитуле карта, чтобы инициировать поток номинального входа.

  3. Бот использует маркер доступа от имени пользователя приложения для выполнения своих действий.

  4. Бот возвращает клиенту Teams ответ без ошибок, используя карта или сообщение.

Примечание.

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

Пример кода

Название примера Описание .NET Node.js Манифест
Единый вход для универсальных действий адаптивных карточек В этом примере кода показано, как включить проверку подлинности единого входа для универсальных действий адаптивных карточек в боте. Просмотр Просмотр Просмотр

См. также