Emprunter l’identité d’un autre utilisateur à l’aide de l’API Web
Quelquefois, votre code doit exécuter des opérations au nom 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 Dataverse peuvent être appelés par différents clients et services au nom d’un utilisateur Dataverse, par exemple dans un flux de travail ou une solution ISV (fournisseur de logiciel indépendant) personnalisée. 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 méthodes permettant d’emprunter l’identité d’un utilisateur, toutes deux possibles en transmettant un en-tête avec l’ID d’utilisateur correspondant.
- Préféré : empruntez l’identité d’un utilisateur en fonction de son ID d’objet Microsoft Entra ID en passant cette valeur avec l’en-tête
CallerObjectId
. - Hérité : pour emprunter l’identité d’un utilisateur en fonction de son systemuserid, vous pouvez utiliser
MSCRMCallerID
avec la valeur guid correspondante.
Dans cet exemple, une entité de compte est créée pour le compte de l’utilisateur avec un ID d’objet Microsoft Entra ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
.
Demande :
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"}
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 avec l’emprunt d’identité, vous pouvez trouver l’utilisateur qui a lancé l’opération en interrogeant les enregistrements 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": "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"
}
}
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 les 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