Compartilhar via


Configurar um Aplicativo Lógico para uso do Fluxo de Trabalho do Ciclo de Vida

Antes de usar um Aplicativo Lógico do Azure existente com o recurso de extensão de tarefa personalizada dos Fluxos de Trabalho do Ciclo de Vida, ele deve primeiro ser compatível. Este guia de referência fornece uma lista de etapas que devem ser executadas para tornar o Aplicativo Lógico do Azure compatível. Para obter um guia sobre como criar um novo Aplicativo Lógico compatível por meio do portal dos Fluxos de Trabalho do Ciclo de Vida, confira Disparar os Aplicativos Lógicos com base em extensões de tarefa personalizadas.

Determine o tipo de segurança do token da sua extensão de tarefa personalizada

Antes de configurar sua extensão personalizada do Aplicativo Lógico do Azure para uso com Fluxos de Trabalho do Ciclo de Vida, você deve primeiro descobrir que tipo de token de segurança ele possui. Os dois tipos de token de segurança podem ser:

  • Normal
  • Prova de Posse (POP)

Para determinar o tipo de token de segurança da sua extensão de tarefa personalizada, verifique a página Extensões personalizadas:

Captura de tela da extensão de tarefa personalizada e do tipo de token.

Observação

Novas extensões de tarefa personalizadas terão apenas o token de segurança do tipo Prova de Posse (POP). Apenas as extensões de tarefas criadas antes da inclusão do token de segurança do tipo Prova de Posse terão um tipo Normal.

Configurar os Aplicativos Lógicos existentes para uso de LCW

Tornar um aplicativo Lógico do Azure compatível para ser executado com a Extensão de Tarefa Personalizada requer as seguintes etapas:

  • Configurar o gatilho do aplicativo lógico
  • Configure a ação de retorno da chamada (aplicável apenas para o cenário de retorno da chamada.)
  • Habilitar identidade gerenciada atribuída pelo sistema (Sempre necessária para as extensões do token de segurança do tipo Normal. Esse também é o padrão para cenários de retorno de chamada com extensões de tarefas personalizadas. Para obter mais informações sobre esse e outros cenários de implantação de extensões de tarefas personalizadas, consulte: Cenários de implantação de extensões de tarefas personalizadas.)
  • Configurar políticas AuthZ

Para configurá-las, siga estas etapas:

  1. Abra o Aplicativo Lógico do Azure que você deseja usar com o Fluxo de Trabalho do Ciclo de Vida. Os Aplicativos Lógicos podem receber você com uma tela de introdução, que é possível fechar com o X no canto superior direito.

  2. À esquerda da tela, selecione Exibição de código do Aplicativo Lógico.

  3. No editor cole o código a seguir:

    {
      "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. Selecione Salvar.

  5. Alterne para o designer do Aplicativo Lógico e inspecione o gatilho configurado e a ação de retorno de chamada. Para criar sua lógica de negócios personalizada, adicione outras ações entre o gatilho e a ação de retorno de chamada. Se você estiver interessado apenas no cenário de disparar e esquecer, poderá remover a ação de retorno de chamada.

  6. À esquerda da tela, selecione Identidade.

  7. Na guia atribuída pelo sistema, habilite o status para registrá-lo no ID do Microsoft Entra.

  8. Selecione Salvar.

Configurar a diretiva de autorização para extensão da tarefa personalizada com o token de segurança do tipo POP

Se o token de segurança for do tipo Prova de Posse (POP) para sua extensão de tarefa personalizada, você definirá a política de autorização seguindo estas etapas:

  1. Vá para o aplicativo lógico criado e selecione Autorização.

  2. Crie uma política de autorização com base na tabela a seguir:

    Nome da política: POP-Policy

    Tipo de política: AADPOP

    Declaração Valor
    Emissor 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/(nome do LogicApp)
  3. Salve a política de autorização.

Cuidado

Preste atenção aos detalhes, pois pequenas diferenças podem levar a problemas posteriormente.

  • Em Issuer, verifique se você incluiu a barra invertida após a ID do Locatário
  • Em appid, verifique se a declaração personalizada é appid com todas as letras minúsculas. O valor de appid representa os fluxos de trabalho do ciclo de vida e é sempre o mesmo.

Configurar a política de autorização para extensão de tarefa personalizada com o token de segurança do tipo normal

Se o token de segurança for do tipo Normal para sua extensão de tarefa personalizada, defina a política de autorização seguindo estas etapas:

  1. Para a política de autorização dos Aplicativos Lógicos, precisamos das identidades gerenciadas ID do Aplicativo. Como o centro de administração do Microsoft Entra mostra apenas a ID do objeto, precisamos pesquisar a ID do aplicativo. Procure a identidade gerenciada pela ID de Objeto em Aplicativos Empresariais no centro de administração do Microsoft Entra para encontrar a ID de Aplicativo necessária.

  2. Voltar ao aplicativo lógico criado e selecione Autorização.

  3. Crie duas políticas de autorização com base nessas tabelas:

    Nome da política: AzureADLifecycleWorkflowsAuthPolicy

    Tipo de política: AAD

    Declaração Valor
    Emissor https://sts.windows.net/(Tenant ID)/
    Público ID do aplicativo da identidade gerenciada dos Aplicativos Lógicos
    appid 00001111-aaaa-2222-bbbb-3333cccc4444

    Nome da política: AzureADLifecycleWorkflowsAuthPolicyV2App

    Tipo de política: AAD

    Declaração Valor
    Emissor https://login.microsoftonline.com/(Tenant ID)/v2.0
    Público ID do aplicativo da identidade gerenciada dos Aplicativos Lógicos
    azp ce79fdc4-cd1d-4ea5-8139-e74d7dbe0bb7
  4. Salve a política de autorização.

Cuidado

Preste atenção aos detalhes, pois pequenas diferenças podem levar a problemas posteriormente.

  • Em Issuer, verifique se você incluiu a barra invertida após a ID do Locatário.
  • Em Público-alvo, verifique se você está usando a ID do Aplicativo e não a ID do Objeto da identidade gerenciada.
  • Em appid, verifique se a declaração personalizada é appid com todas as letras minúsculas. O valor de appid representa os fluxos de trabalho do ciclo de vida e é sempre o mesmo.

Usando o aplicativo lógico com Fluxos de Trabalho do Ciclo de Vida

Agora que o seu aplicativo lógico está configurado para uso com Fluxos de Trabalho do Ciclo de Vida, você pode criar uma extensão de tarefa personalizada por meio da interface do usuário ou da API e usá-la em um Fluxo de Trabalho do Ciclo de Vida.

Próximas etapas