Compartir a través de


Suplantar la identidad de otro usuario mediante la API Web

A veces, el código debe realizar operaciones en nombre de otro usuario. Si la cuenta del sistema que ejecuta el código tiene los privilegios necesarios, puede realizar operaciones en nombre de otros usuarios.

Requisitos de la suplantación

Use la suplantación para ejecutar lógica de negocios (código) en nombre de otro usuario de Microsoft Dataverse para proporcionar una característica o servicio deseados mediante el rol adecuado y la seguridad basada en objetos del usuario suplantado. Los servicios web de Dataverse pueden ser invocados por varios clientes y servicios en nombre de un usuario de Dataverse, por ejemplo, en un flujo de trabajo o en una solución personalizada de un ISV (proveedor de software independiente). La suplantación implica dos cuentas distintas de usuario: una cuenta de usuario (A) que se usa al ejecutar código para realizar algunas tareas en nombre de otro usuario (B).

La cuenta de usuario (A) necesita el privilegio prvActOnBehalfOfAnotherUser, que está incluido en el rol de seguridad 'Delegado'. El conjunto real de privilegios que se utiliza para modificar los datos es la intersección de los privilegios que el usuario con rol de delegado posee con la del usuario que se suplanta. Es decir, al usuario (A) se le permite hacer algo solo si el usuario (A) y el usuario suplantado (B) tienen el privilegio necesario para realizar la acción.

Cómo suplantar a un usuario

Puede suplantar a un usuario de dos maneras. Ambos métodos funcionan pasando un encabezado con el identificador de usuario correspondiente.

  1. Preferido: suplante a un usuario en función de su id. de objeto de Microsoft Entra ID pasando ese valor junto con el encabezado CallerObjectId.
  2. Datos heredados: Para suplantar a un usuario en función de su systemuserid, use MSCRMCallerID con el valor de GUID correspondiente.

En este ejemplo, crea una nueva entidad de cuenta en nombre del usuario con un id. de objeto de Microsoft Entra ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb.

Solicitud:

POST [Organization URI]/api/data/v9.2/accounts HTTP/1.1  
CallerObjectId: aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb  
Accept: application/json  
Content-Type: application/json; charset=utf-8  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
  
{"name":"Sample Account created using impersonation"}  

Respuesta:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
OData-EntityId: [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-000000000003)  

Determinar el usuario real

Al realizar una operación como crear una entidad mediante la suplantación, puede encontrar al usuario que realmente realizó la operación consultando el registro, incluida la createdonbehalfby propiedad de navegación con un solo valor. Una propiedad de navegación de un solo valor modifiedonbehalfby correspondiente está disponible para operaciones que actualizan la entidad.

Solicitud:

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  

Respuesta:

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": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    "systemuserid": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
    "ownerid": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
  },
  "createdonbehalfby": {
    "@odata.etag": "W/\"2632445\"",
    "fullname": "Actual User",
    "azureactivedirectoryobjectid": "bbbbbbbb-1111-2222-3333-cccccccccccc",
    "systemuserid": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
    "ownerid": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff"
  },
  "owninguser": {
    "@odata.etag": "W/\"2632435\"",
    "fullname": "Impersonated User",
    "azureactivedirectoryobjectid": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    "systemuserid": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
    "ownerid": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
  }
}

Consulte también

Suplantar a otro usuario
Suplantar a otro usuario utilizando SDK para .NET
Realizar operaciones mediante la API web