Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
-
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. -
Datos heredados: Para suplantar a un usuario en función de su systemuserid, use
MSCRMCallerIDcon 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