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


Настройка Logic App для использования в рабочем процессе жизненного цикла

Прежде чем использовать существующее приложение Azure Logic App с возможностью расширения пользовательских задач для рабочих процессов жизненного цикла, сначала необходимо обеспечить его совместимость. Это справочное руководство содержит список действий, которые необходимо предпринять, чтобы приложение Azure Logic Apps стало совместимым. Руководство по созданию совместимого приложения логики с помощью портала рабочих процессов жизненного цикла см. в разделе "Триггер Logic Apps" на основе пользовательских расширений задач.

Определите тип безопасности токена вашего пользовательского расширения задачи

Прежде чем настраивать пользовательское расширение Azure Logic App для использования с рабочими процессами жизненного цикла, необходимо сначала выяснить, какой тип безопасности токена используется. Два типа токенов безопасности могут быть такими:

  • Обычная
  • Подтверждение владения (POP)

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

Снимок экрана: расширение пользовательской задачи и тип маркера.

Примечание.

Новые пользовательские расширения задач будут иметь только тип безопасности доказательства владения (POP). Только расширения задач, созданные до добавления типа безопасности маркера удостоверения владения, будут иметь тип «Обычный».

Настройка существующих Logic Apps для использования в рабочих процессах жизненного цикла

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

  • Настройте триггер приложения логики
  • Настройте действие обратного вызова (применимо только к сценарию обратного вызова.)
  • Включите системно назначаемое управляемое удостоверение (всегда требуется для расширений типа обычного маркера безопасности. Это также используется по умолчанию для сценариев обратного вызова с пользовательскими расширениями задач. Для получения дополнительной информации о сценариях развертывания данных и других пользовательских расширений задач см. Сценарии развертывания пользовательских расширений задач.)
  • Настройка политик AuthZ

Чтобы настроить это, выполните следующие действия.

  1. Откройте приложение логики Azure, которое хотите использовать с рабочим процессом жизненного цикла. В Logic Apps может появиться экран приветствия, который можно закрыть с помощью крестика в правом верхнем углу.

  2. На левой стороне экрана выберите Просмотр кода Logic App.

  3. В редакторе вставьте следующий код:

    {
      "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
          "HTTP": {
            "inputs": {
              "authentication": {
                "audience": "https://graph.microsoft.com",
                "type": "ManagedServiceIdentity"
              },
              "body": {
                "data": {
                  "operationStatus": "Completed"
                },
                "source": "sample",
                "type": "lifecycleEvent"
              },
              "method": "POST",
              "uri": "https://graph.microsoft.com/beta@{triggerBody()?['data']?['callbackUriPath']}"
            },
            "runAfter": {},
            "type": "Http"
          }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
          "manual": {
            "inputs": {
              "schema": {
                "properties": {
                  "data": {
                    "properties": {
                      "callbackUriPath": {
                        "description": "CallbackUriPath used for Resume Action",
                        "title": "Data.CallbackUriPath",
                        "type": "string"
                      },
                      "subject": {
                        "properties": {
                          "displayName": {
                            "description": "DisplayName of the Subject",
                            "title": "Subject.DisplayName",
                            "type": "string"
                          },
                          "email": {
                            "description": "Email of the Subject",
                            "title": "Subject.Email",
                            "type": "string"
                          },
                          "id": {
                            "description": "Id of the Subject",
                            "title": "Subject.Id",
                            "type": "string"
                          },
                          "manager": {
                            "properties": {
                              "displayName": {
                                "description": "DisplayName parameter for Manager",
                                "title": "Manager.DisplayName",
                                "type": "string"
                              },
                              "email": {
                                "description": "Mail parameter for Manager",
                                "title": "Manager.Mail",
                                "type": "string"
                              },
                              "id": {
                                "description": "Id parameter for Manager",
                                "title": "Manager.Id",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "userPrincipalName": {
                            "description": "UserPrincipalName of the Subject",
                            "title": "Subject.UserPrincipalName",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "task": {
                        "properties": {
                          "displayName": {
                            "description": "DisplayName for Task Object",
                            "title": "Task.DisplayName",
                            "type": "string"
                          },
                          "id": {
                            "description": "Id for Task Object",
                            "title": "Task.Id",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "taskProcessingResult": {
                        "properties": {
                          "createdDateTime": {
                            "description": "CreatedDateTime for TaskProcessingResult Object",
                            "title": "TaskProcessingResult.CreatedDateTime",
                            "type": "string"
                          },
                          "id": {
                            "description": "Id for TaskProcessingResult Object",
                            "title": "TaskProcessingResult.Id",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "workflow": {
                        "properties": {
                          "displayName": {
                            "description": "DisplayName for Workflow Object",
                            "title": "Workflow.DisplayName",
                            "type": "string"
                          },
                          "id": {
                            "description": "Id for Workflow Object",
                            "title": "Workflow.Id",
                            "type": "string"
                          },
                          "workflowVersion": {
                            "description": "WorkflowVersion for Workflow Object",
                            "title": "Workflow.WorkflowVersion",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "source": {
                    "description": "Context in which an event happened",
                    "title": "Request.Source",
                    "type": "string"
                  },
                  "type": {
                    "description": "Value describing the type of event related to the originating occurrence.",
                    "title": "Request.Type",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "kind": "Http",
            "type": "Request"
          }
        }
      },
      "parameters": {}
    }
    
  4. Выберите Сохранить.

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

  6. В левой части экрана нажмите Идентификатор.

  7. На назначаемой системой вкладке включите статус для регистрации с идентификатором Microsoft Entra ID.

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

Настройка политики авторизации для пользовательского расширения задач с типом токена безопасности POP

Если тип маркера безопасности — Proof of Possession (POP) для вашего пользовательского расширения задачи, установите политику авторизации, следуя этим шагам.

  1. Перейдите к созданному приложению логики и выберите "Авторизация".

  2. Создайте политику авторизации на основе следующей таблицы:

    Имя политики: POP-Policy

    Тип политики: AADPOP

    Утверждение Значение
    Издатель https://sts.windows.net/(Tenant ID)/
    appid 00001111-aaaa-2222-bbbb-3333cccc4444
    m ПУБЛИКАЦИЯ
    u management.azure.com
    п /subscriptions/(subscriptionId)/resourceGroups/(resourceGroupName)/providers/Microsoft.Logic/workflows/(LogicApp name)
  3. Сохраните политику авторизации.

Внимание

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

  • Для Issuer убедитесь, что вы добавили косую черту после идентификатора клиента.
  • Для appid убедитесь, что настраиваемое утверждение находится appid в нижнем регистре. Значение appid представляет рабочие процессы жизненного цикла и всегда одинаково.

Настройка политики авторизации для пользовательского расширения задач с обычным типом маркера безопасности

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

  1. Для политики авторизации Logic Apps нам нужен идентификатор управляемых удостоверений приложения. Так как Центр администрирования Microsoft Entra отображает только идентификатор объекта, нам нужно найти идентификатор приложения. Вы можете найти управляемое удостоверение по идентификатору объекта в разделе Корпоративные приложения в Центре администрирования Microsoft Entra, чтобы найти необходимый идентификатор приложения.

  2. Вернитесь к новому приложению логики и выберите Авторизация.

  3. Создайте две политики авторизации на основе этих таблиц:

    Имя политики: AzureADLifecycleWorkflowsAuthPolicy

    Тип политики: AAD

    Утверждение Значение
    Издатель https://sts.windows.net/(Tenant ID)/
    Аудитория Идентификатор приложения Logic Apps с управляемым удостоверением
    идентификатор приложения (appid) 00001111-aaaa-2222-bbbb-3333cccc4444

    Имя политики: AzureADLifecycleWorkflowsAuthPolicyV2App

    Тип политики: AAD

    Утверждение Значение
    Издатель https://login.microsoftonline.com/(Tenant ID)/v2.0
    Аудитория Идентификатор приложения управляемой идентичности Logic Apps
    azp ce79fdc4-cd1d-4ea5-8139-e74d7dbe0bb7
  4. Сохраните политику авторизации.

Внимание

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

  • Для Issuer убедитесь, что вы добавляете косую черту после идентификатора клиента.
  • Для аудитории убедитесь, что вы используете идентификатор приложения, а не идентификатор объекта управляемого удостоверения.
  • Для appid, убедитесь, что настраиваемое утверждение находится appid в нижнем регистре. Значение appid представляет рабочие процессы жизненного цикла и всегда одинаково.

Использование приложения логики с рабочими процессами жизненного цикла

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

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