配置生命周期工作流使用的逻辑应用

在将 Azure 逻辑应用与生命周期工作流的自定义任务扩展功能配合使用之前,必须首先使两者兼容。 本参考指南提供了一系列步骤,必须执行这些步骤才能使 Azure 逻辑应用兼容。 有关通过生命周期工作流门户创建新的兼容逻辑应用的指南,请参阅基于自定义任务扩展触发逻辑应用

确定自定义任务扩展的令牌安全性类型

在配置 Azure 逻辑应用自定义扩展以用于生命周期工作流之前,必须先确定其具有哪种类型的令牌安全性。 两种令牌安全类型包括:

  • 普通
  • 所有权证明 (PoP)

若要确定自定义任务扩展的安全令牌类型,请查看“自定义扩展”页面:

自定义任务扩展和令牌类型的屏幕截图。

注意

新的自定义任务扩展将仅具有所有权证明 (POP) 令牌安全类型。 只有在包含所有权证明令牌安全类型之前创建的任务扩展才会具有“普通”类型。

配置现有逻辑应用以供 LCW 使用

要使 Azure 逻辑应用与自定义任务扩展兼容运行,需要执行以下步骤:

  • 配置逻辑应用触发器
  • 配置回叫操作(仅适用于回叫方案。)
  • 启用系统分配的托管标识(对于普通安全令牌类型扩展始终是必需的。这也是具有自定义任务扩展的回叫方案的默认值。有关此方案和其他自定义任务扩展部署方案的详细信息,请参阅:自定义任务扩展部署方案。)
  • 配置 AuthZ 策略

若要配置,请执行以下步骤:

  1. 打开要与生命周期工作流配合使用的 Azure 逻辑应用。 逻辑应用可能会显示一个包含问候的简介屏幕,通过右上角的 X 可以将其关闭。

  2. 在屏幕左侧选择“逻辑应用代码视图”。

  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 安全令牌类型的自定义任务扩展配置授权策略

如果自定义任务扩展的安全令牌类型为所有权证明 (POP),请按照以下步骤设置授权策略:

  1. 前往创建的逻辑应用,然后选择“授权”

  2. 根据下表创建授权策略:

    策略名称:POP-Policy

    策略类型:AADPOP

    声明
    颁发者 https://sts.windows.net/(Tenant ID)/
    appid 00001111-aaaa-2222-bbbb-3333cccc4444
    m POST
    u management.azure.com
    p /subscriptions/(subscriptionId)/resourceGroups/(resourceGroupName)/providers/Microsoft.Logic/workflows/(LogicApp name)
  3. 保存授权策略。

注意

请注意细节,因为细微差异可能导致以后出现问题。

  • 对于 Issuer,请确保租户 ID 后面包含斜杠
  • 对于 appid,请确保自定义声明为全部小写的 appidappid 值表示生命周期工作流,并且值始终保持不变。

为具有普通安全令牌类型的自定义任务扩展配置授权策略

如果自定义任务扩展的安全令牌类型为普通,请按照以下步骤设置授权策略:

  1. 对于逻辑应用授权策略,我们需要托管标识应用程序 ID。 由于 Microsoft Entra 管理中心仅显示“对象 ID”,因此我们需要查找“应用程序 ID”。 可以按 Microsoft Entra 管理中心中的“企业应用程序”下的“对象 ID”搜索托管标识,以查找所需的“应用程序 ID”。

  2. 返回创建的逻辑应用,然后选择“授权”。

  3. 基于这些表创建两个授权策略:

    策略名称:AzureADLifecycleWorkflowsAuthPolicy

    策略类型:AAD

    声明
    颁发者 https://sts.windows.net/(Tenant ID)/
    读者 逻辑应用托管标识的应用程序 ID
    appid 00001111-aaaa-2222-bbbb-3333cccc4444

    策略名称:AzureADLifecycleWorkflowsAuthPolicyV2App

    策略类型:AAD

    声明
    颁发者 https://login.microsoftonline.com/(Tenant ID)/v2.0
    读者 逻辑应用托管标识的应用程序 ID
    azp ce79fdc4-cd1d-4ea5-8139-e74d7dbe0bb7
  4. 保存授权策略。

注意

请注意细节,因为细微差异可能导致以后出现问题。

  • 对于 Issuer,请确保租户 ID 后面包含斜杠。
  • 对于受众,请确保使用的是应用程序 ID,而不是托管标识的对象 ID。
  • 对于 appid,请确保自定义声明为全部小写的 appidappid 值表示生命周期工作流,并且值始终保持不变。

将逻辑应用与生命周期工作流配合使用

现在,逻辑应用已配置为与生命周期工作流配合使用,可以通过 UI 或 API 创建自定义任务扩展,然后在生命周期工作流中使用它。

后续步骤