Usar la API web para suplantar a otro usuario

Completado

Ocasionalmente, es posible que deba ejecutar la lógica para otro usuario. Dentro del contexto de Microsoft Dataverse, su lógica se aplica a toda la seguridad basada en objetos y roles adecuada en función del usuario que esté suplantando. Este método puede ser especialmente efectivo cuando está integrando sistemas externos con una solución de Dataverse donde la cuenta de integración es una cuenta del sistema y no del usuario que realmente invocó la solicitud.

Implementar una solicitud de API web con suplantación de usuario

Al llamar a cualquier método de API web, puede proporcionar un CallerObjectId en el encabezado del mensaje para indicar que desea que el mensaje se ejecute para ese usuario en particular. El valor de este parámetro es el id. de objeto de Microsoft Entra ID. La Graph API de Microsoft Entra proporciona un método para consultar los datos de usuario de Microsoft Entra. Para obtener más información, consulte la Referencia de Microsoft Entra ID Graph API.

Determinar el usuario que realizó una operación

Si necesita ver la identificación del usuario que realmente realizó una operación para otro usuario, puede consultar el valor createdonbehalfby del registro, que contiene este detalle. Por ejemplo, si desea ver si se creó una fila de cuenta mediante la suplantación del usuario en lugar del usuario real, puede consultar ese registro de cuenta para comparar los valores createdby y createdonbehalfby por medio de la siguiente 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

Si una cuenta de suplantación creó el registro, puede esperar una respuesta similar a la del siguiente ejemplo:

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": "e39c5d16-675b-48d1-8e67-667427e9c084",
    "systemuserid": "75df116d-d9da-e711-a94b-000d3a34ed47",
    "ownerid": "75df116d-d9da-e711-a94b-000d3a34ed47"
  },
  "createdonbehalfby": {
    "@odata.etag": "W/"2632445"",
    "fullname": "Actual User",
    "azureactivedirectoryobjectid": "3d8bed3e-79a3-47c8-80cf-269869b2e9f0",
    "systemuserid": "278742b0-1e61-4fb5-84ef-c7de308c19e2",
    "ownerid": "278742b0-1e61-4fb5-84ef-c7de308c19e2"
  },
  "owninguser": {
    "@odata.etag": "W/"2632435"",
    "fullname": "Impersonated User",
    "azureactivedirectoryobjectid": "e39c5d16-675b-48d1-8e67-667427e9c084",
    "systemuserid": "75df116d-d9da-e711-a94b-000d3a34ed47",
    "ownerid": "75df116d-d9da-e711-a94b-000d3a34ed47"
  }
}