Emprunter l’identité d’un autre utilisateur à l’aide de l’API Web
Il y a des moments où votre code doit effectuer des opérations pour le compte d’un autre utilisateur. Si le compte système exécutant votre code contient des privilèges requis, vous pouvez exécuter des opérations à la place d’autres utilisateurs.
Configuration requise pour l’emprunt d’identité
L’emprunt d’identité permet d’exécuter une logique métier (code) au nom d’un autre utilisateur de Microsoft Dataverse pour fournir une fonctionnalité ou un service voulu avec le rôle approprié et la sécurité basée sur les objets de cet utilisateur représenté. L’emprunt d’identité est nécessaire car les services Web peuvent être appelés par différents clients et services au nom d’un utilisateur, par exemple dans un flux de travail ou une solution ISV (Independent Software Vendor) personnalisée. Dataverse Dataverse L’emprunt d’identité comprend deux comptes d’utilisateurs différents : un compte d’utilisateur (A) sert à exécuter le code pour effectuer certaines tâches au nom d’un autre utilisateur (B).
Le compte d’utilisateur (A) a besoin du privilège prvActOnBehalfOfAnotherUser
, qui est fourni avec le rôle de sécurité Délégué. L’ensemble réel de privilèges qui est utilisé pour modifier les données est à l’intersection des privilèges que l’utilisateur du rôle Delegate possède et de ceux de l’utilisateur qui est représenté. En d’autres termes, l’utilisateur (A) est autorisé à agir si et seulement si l’utilisateur (A) et l’utilisateur représenté (B) ont les privilèges nécessaires pour l’action.
Comment emprunter l’identité d’un utilisateur ?
Il existe deux manières d’usurper l’identité d’un utilisateur, toutes deux rendues possibles en transmettant un en-tête avec l’ID utilisateur correspondant.
- Préféré : emprunter l’identité d’un utilisateur en fonction de son Microsoft Entra ID d’objet ID en transmettant cette valeur avec l’en-tête
CallerObjectId
. - Héritage : Pour emprunter l’identité d’un utilisateur en fonction de son ID système, vous pouvez utiliser
MSCRMCallerID
avec la valeur guid correspondante.
Dans cet exemple, une nouvelle entité de compte est créée au nom de l’utilisateur avec un Microsoft Entra ID d’objet ID e39c5d16-675b-48d1-8e67-667427e9c084
.
Demande :
POST [Organization URI]/api/data/v9.2/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"}
Réponse :
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-000000000003)
Déterminer l’utilisateur actuel
Lorsqu’une opération telle que la création d’une entité est effectuée à l’aide d’un emprunt d’identité, vous pouvez trouver l’utilisateur qui a réellement effectué l’opération en interrogeant l’enregistrement incluant la propriété de navigation à valeur unique. createdonbehalfby
Une propriété de navigation à valeur unique modifiedonbehalfby
correspondante est disponible pour les opérations qui mettent à jour l’entité.
Demande :
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
Réponse :
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"
}
}
Voir aussi
Emprunter l’identité d’un autre utilisateur
Emprunter l’identité d’un autre utilisateur à l’aide du SDK pour .NET
Effectuer des opérations à l’aide de l’API Web
Composer des demandes Http et gérer les erreurs
Interroger des données à l’aide de l’API Web
Créer une ligne de table à l’aide de l’API web
Récupérer une ligne de table à l’aide de l’API web
Mettre à jour et supprimer des lignes de table à l’aide de l’API web
Associer et dissocier des lignes de tables à l’aide de l’API web
Utiliser des fonctions API Web
Utiliser des actions API web
Exécuter des opérations par lots à l’aide de l’API Web
Effectuer les opérations conditionnelles à l’aide de l’API Web
Notes
Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)
Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).