Uso dell'API Web per rappresentare un altro utente
Occasionalmente potrebbe essere necessario eseguire la logica per un altro utente. Nel contesto di Microsoft Dataverse, la logica applica il livello appropriato di sicurezza basata sui ruoli e sugli oggetti a seconda dell'utente rappresentato. Questo metodo può risultare particolarmente efficace in caso di integrazione di sistemi esterni con una soluzione Dataverse in cui l'account di integrazione è un account di sistema anziché l'utente che ha effettivamente richiamato la richiesta.
Implementazione di una richiesta API Web con rappresentazione dell'utente
Quando si chiama un metodo API Web, è possibile fornire un CallerObjectId nell'intestazione del messaggio, a indicare l'intenzione che il messaggio venga eseguito come uno specifico utente. Il valore di questo parametro è l'ID oggetto di Microsoft Entra ID dell'utente. L'API Graph Microsoft Entra fornisce un metodo per eseguire query sui dati utente di Microsoft Entra. Per altre informazioni, vedere il riferimento all'API Graph Microsoft Entra ID.
Determinazione dell'utente che ha eseguito un'operazione
Se è necessario visualizzare l'ID dell'utente che ha effettivamente eseguito un'operazione per un altro utente, è possibile eseguire una query sul valore createdonbehalfby del record, che contiene questo dettaglio. Ad esempio, per vedere se una riga di account è stata creata tramite una rappresentazione dell'utente anziché dall'utente effettivo, è possibile eseguire una query su tale record di account per confrontare i valori createdby e createdonbehalfby mediante la seguente query:
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
Se il record è stato creato da un account che rappresenta l'utente, la risposta dovrebbe essere simile a quella del seguente esempio:
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"
}
}