Usar a API Web para personificar outro usuário

Concluído

Ocasionalmente, pode ser necessário executar a lógica para outro usuário. No contexto do Microsoft Dataverse, sua lógica aplica todas as funções apropriadas e segurança baseada em objeto com base no usuário que você está personificando. Esse método pode ser particularmente eficaz quando você integra sistemas externos com uma solução do Dataverse em que a conta de integração é uma conta do sistema versus o usuário que realmente invocou a solicitação.

Implementar uma solicitação de API Web com representação do usuário

Ao chamar qualquer método de API Web, você pode fornecer um CallerObjectId no cabeçalho da mensagem para indicar que deseja que a mensagem seja executada como esse usuário específico. O valor deste parâmetro é a ID do objeto Microsoft Entra ID. A Graph API do Microsoft Entra fornece um método para consultar dados do usuário do Microsoft Entra. Para obter mais informações, consulte a Referência da Graph API do Microsoft Entra ID.

Determinar o usuário que executou uma operação

Se precisar ver a ID do usuário que realmente executou uma operação para outro usuário, você poderá consultar o valor createdonbehalfby do registro, que contém esse detalhe. Por exemplo, se você quiser ver se uma linha de conta foi criada por meio da representação do usuário e não pelo usuário real, poderá consultar esse registro de conta para comparar seus valores createdby e createdonbehalfby usando a seguinte consulta:

GET [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-000000000003)?$select=name&$expand=createdby($select=fullname),createdonbehalfby($select=fullname),owninguser($select=fullname) HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0

Se uma conta de representação tiver criado o registro, você poderá esperar uma resposta semelhante ao seguinte exemplo:

HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
ETag: W/"506868"

{
  "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,createdby(fullname,azureactivedirectoryobjectid),createdonbehalfby(fullname,azureactivedirectoryobjectid),owninguser(fullname,azureactivedirectoryobjectid))/$entity",
  "@odata.etag": "W/"2751197"",
  "name": "Sample Account created using impersonation",
  "accountid": "00000000-0000-0000-000000000003",
  "createdby": {
    "@odata.etag": "W/"2632435"",
    "fullname": "Impersonated User",
    "azureactivedirectoryobjectid": "",
    "systemuserid": "75df116d-d9da-e711-a94b-000d3a34ed47",
    "ownerid": "75df116d-d9da-e711-a94b-000d3a34ed47"
  },
  "createdonbehalfby": {
    "@odata.etag": "W/"2632445"",
    "fullname": "Actual User",
    "azureactivedirectoryobjectid": "",
    "systemuserid": "278742b0-1e61-4fb5-84ef-c7de308c19e2",
    "ownerid": "278742b0-1e61-4fb5-84ef-c7de308c19e2"
  },
  "owninguser": {
    "@odata.etag": "W/"2632435"",
    "fullname": "Impersonated User",
    "azureactivedirectoryobjectid": ",
    "systemuserid": "75df116d-d9da-e711-a94b-000d3a34ed47",
    "ownerid": "75df116d-d9da-e711-a94b-000d3a34ed47"
  }
}