Suplantar a otro usuario utilizando la API web
Hay ocasiones en las que el código deberá realizar operaciones en nombre de otro usuario. Si la cuenta del sistema que ejecuta el código tiene los privilegios adecuados, puede realizar operaciones en nombre de otros usuarios.
Requisitos de la suplantación
La suplantación se utiliza para ejecutar la lógica de negocios (código) en nombre de otro usuario de Microsoft Dataverse para proporcionar una característica o servicio deseado con el rol que le corresponde y la seguridad basada en objetos de dicho usuario suplantado. Esto es necesario porque varios clientes y servicios en nombre de un usuario de Dataverse pueden llamar a los servicios web de Dataverse, por ejemplo, en un flujo de trabajo o una solución de ISV personalizada. 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) debe tener el privilegio prvActOnBehalfOfAnotherUser
, que se incluye 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 (B) tienen el privilegio necesario para realizar la acción.
Cómo suplantar a un usuario
Hay dos formas de suplantar a un usuario, ambas posibles pasando un encabezado con el correspondiente identificador de usuario.
- Preferido: Suplanta a un usuario en función de la identificación de objeto de Microsoft Entra ID pasando ese valor junto con el
CallerObjectId
del encabezado. - Datos heredados: Para suplantar a un usuario en función de su systemuserid puede aprovechar
MSCRMCallerID
con el valor de guid correspondiente.
En este ejemplo, se crea una nueva entidad de cuenta en nombre del usuario con un identificador de objeto de Microsoft Entra ID e39c5d16-675b-48d1-8e67-667427e9c084
.
Solicitud:
POST [Organization URI]/api/data/v9.0/accounts HTTP/1.1
CallerObjectId: e39c5d16-675b-48d1-8e67-667427e9c084
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.0/accounts(00000000-0000-0000-000000000003)
Determinar el usuario real
Cuando una operación como crear una entidad se realiza mediante suplantación, el usuario que realiza la operación se puede encontrar consultando el registro incluida la propiedad de navegación de un solo valor createdonbehalfby
. 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.0/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.0/$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"
}
}
Consulte también
Suplantar a otro usuario
Suplantar a otro usuario utilizando SDK para .NET
Realizar operaciones mediante la API web
Componer solicitudes HTTP y administrar errores
Consultar datos utilizando la API web
Crear una fila de tabla usando la API web
Recuperar una fila de tabla usando la API web
Actualizar y eliminar filas de tablas usando la API web
Asociar y anular la asociación de filas de tabla mediante la API web
Usar funciones de la API web
Usar acciones de la API web
Ejecute las operaciones por lotes mediante API web
Realizar operaciones condicionales mediante la API web
Nota
¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)
La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de