Emprunter l’identité d’un autre utilisateur à l’aide de l’API web
Vous devrez peut-être parfois exécuter la logique pour un autre utilisateur. Dans le cadre de Microsoft Dataverse, votre logique applique tous les rôles et la sécurité basée sur les objets appropriés en fonction de l’utilisateur dont vous empruntez l’identité. Cette méthode peut être particulièrement efficace lorsque vous intégrez des systèmes externes à une solution Dataverse où le compte d’intégration est un compte système contrairement à l’utilisateur qui a effectivement appelé la requête.
Implémentation d’une requête d’API web avec emprunt d’identité d’un utilisateur
Lorsque vous appelez une méthode d’API web, vous pouvez fournir un CallerObjectId dans votre en-tête de message pour indiquer que vous souhaitez que le message soit exécuté en tant que cet utilisateur spécifique. La valeur de ce paramètre est l’ID objet Microsoft Entra ID de celui-ci. L’API Graph Microsoft Entra fournit une méthode permettant d’interroger les données utilisateur Microsoft Entra. Pour en savoir plus, consultez la Référence à l’API Graph Microsoft Entra ID.
Déterminer l’utilisateur ayant effectué une opération
Si vous devez connaître l’ID de l’utilisateur ayant réellement effectué une opération pour le compte d’un autre, vous pouvez interroger la valeur createdonbehalfby de la ligne qui comporte ces détails. Par exemple, si vous souhaitez découvrir si une ligne de compte a été créée par emprunt d’identité d’un utilisateur plutôt que par un utilisateur réel, vous pouvez interroger cette ligne de compte pour comparer ses valeurs createdby et createdonbehalfby à l’aide de la requête suivante :
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
Si un compte empruntant une identité a créé la ligne, vous pouvez vous attendre à une réponse similaire à l’exemple suivant :
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": "",
"systemuserid": "75df116d-d9da-e711-a94b-000d3a34ed47",
"ownerid": "75df116d-d9da-e711-a94b-000d3a34ed47"
},
"createdonbehalfby": {
"@odata.etag": "W/"2632445"",
"fullname": "Actual User",
"azureactivedirectoryobjectid": "",
"systemuserid": "278742b0-1e61-4fb5-84ef-c7de308c19e2",
"ownerid": "278742b0-1e61-4fb5-84ef-c7de308c19e2"
},
"owninguser": {
"@odata.etag": "W/"2632435"",
"fullname": "Impersonated User",
"azureactivedirectoryobjectid": ",
"systemuserid": "75df116d-d9da-e711-a94b-000d3a34ed47",
"ownerid": "75df116d-d9da-e711-a94b-000d3a34ed47"
}
}