Partager via


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.

  1. 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.
  2. 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é).