Emprunter l’identité d’un autre utilisateur à l’aide de l’API Web

Quelquefois, votre code devra 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é. C’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 une solution ISV workflow ou 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, qui sont rendues possibles en passant dans un en-tête avec l’ID de l’utilisateur correspondant.

  1. Préféré : Personnifiez un utilisateur en fonction de son ID d’objet Microsoft Entra ID en passant cette valeur avec l’en-tête CallerObjectId.
  2. 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 e39c5d16-675b-48d1-8e67-667427e9c084.

Demande :

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"}  

Réponse :

HTTP/1.1 204 No Content  
OData-Version: 4.0  
OData-EntityId: [Organization URI]/api/data/v9.0/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é, l’utilisateur qui a lancé l’opération peut être trouvé 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.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  

Réponse :

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"
  }
}

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

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