Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utiliser l’emprunt d’identité pour exécuter la logique métier pour le compte d’un autre utilisateur Microsoft Dataverse. En utilisant les paramètres de sécurité appropriés, fondés sur les rôles et les objets, de l’utilisateur dont l’identité est empruntée, vous pouvez fournir la fonctionnalité ou le service souhaité.
Différents clients et services peuvent utiliser l’emprunt d’identité pour appeler les services web Dataverse au nom d’un utilisateur Dataverse.
L’emprunt d’identité implique deux comptes d’utilisateur différents :
| Usurpateur d’identité | Utilisateur usurpé |
|---|---|
| Compte d’utilisateur utilisé pour exécuter le code | Compte d’utilisateur pour lequel la tâche est en cours d’exécution. |
Privilèges requis
L’utilisateur empruntant l’identité doit disposer du privilège Agir au nom d’un autre utilisateur (prvActOnBehalfOfAnotherUser). Ce privilège est inclus dans le rôle de sécurité délégué ou peut être activé pour n’importe quel rôle de sécurité.
Note
Les utilisateurs peuvent être associés à plusieurs rôles de sécurité. L’attribution du rôle de sécurité délégué à un utilisateur accorde le prvActOnBehalfOfAnotherUser privilège ainsi que les privilèges fournis par d’autres rôles de sécurité associés au compte d’utilisateur.
L’ensemble effectif des privilèges utilisés pour modifier les données est l’intersection des privilèges que possède l’utilisateur usurpateur d’identité avec ceux de l’utilisateur dont l’identité est usurpée.
En d’autres termes, l’usurpateur est autorisé à effectuer une action si et seulement si l’usurpateur et l’utilisateur usurpé disposent du privilège nécessaire pour effectuer cette action.
Attribution directe requise
Vous devez attribuer directement aux utilisateurs le privilège Agir au nom d’un autre utilisateur (prvActOnBehalfOfAnotherUser) ou un rôle contenant ce privilège. Les utilisateurs ne peuvent pas hériter de ce privilège par le biais d’une équipe. Cette attribution directe est requise en raison de la nature sensible du privilège.
Usurpation d’identité avec authentification de serveur à serveur
Si vous créez une application cliente web qui nécessite un compte d’utilisateur qui peut agir pour le compte d’un utilisateur abonné, utilisez le compte d’utilisateur d’application spécial afin que vous n’ayez pas besoin d’utiliser une licence utilisateur Dataverse payante.
Pour plus d’informations, voir Créer des applications Web en utilisant l’authentification de serveur à serveur (S2S).
Usurper l’identité d’un autre utilisateur à l’aide de l’API Web
Vous pouvez usurper l’identité d’un utilisateur en transmettant un en-tête de requête avec l’ID d’utilisateur correspondant avant d’envoyer la requête au service web.
Comment emprunter l’identité d’un utilisateur ?
Utilisez l’un de ces en-têtes :
-
Préféré : Définissez
CallerObjectIdsur l’ID d’objet Microsoft Entra ID de l’utilisateur usurpé. Cette valeur est stockée dans SystemUser.AzureActiveDirectoryObjectId. -
Hérité : Définissez
MSCRMCallerIDsur la valeur GUID SystemUser.SystemUserId de l’utilisateur faisant l’objet d’une usurpation d’identité.
L’exemple suivant crée une ligne de compte au nom de l’utilisateur avec l’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-0000-000000000003)
Déterminer l’utilisateur actuel
Lorsque vous créez une ligne à l’aide de l’emprunt d’identité, interrogez la createdonbehalfby propriété de navigation à valeur unique pour rechercher l’utilisateur qui a réellement effectué l’opération. Pour les mises à jour, utilisez la propriété de navigation à valeur unique correspondante modifiedonbehalfby .
L’exemple suivant récupère le compte créé dans l’exemple précédent. Les propriétés createdby et owninguser identifient l’utilisateur usurpé, tandis que createdonbehalfby identifie l’utilisateur réel.
Demande :
GET [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000003)?$select=name&$expand=createdby($select=fullname,azureactivedirectoryobjectid),createdonbehalfby($select=fullname,azureactivedirectoryobjectid),owninguser($select=fullname,azureactivedirectoryobjectid) 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/"2751197"
{
"@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-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"
}
}
Se faire passer pour un autre utilisateur à l’aide du SDK .NET
Pour vous faire passer pour un autre utilisateur, définissez la propriété CallerId avec la valeur Guid de l’utilisateur pour lequel vous vous faites passer. Les classes suivantes mettant en œuvre IOrganizationService comprennent cette propriété.
Emprunter l’identité d’un autre utilisateur à l’aide de plug-ins
Vous pouvez enregistrer un plug-in contenant un code pour spécifier l’utilisateur que les opérations doivent utiliser. Informations complémentaires : Emprunter l’identité d’un utilisateur.
Voir aussi
Créer des applications Web en utilisant l’authentification de serveur à serveur (S2S)
Effectuer des opérations à l’aide de l’API Web
Écrire un plug-in