Annehmen eines anderen Benutzerkontos mit Web API
Es gibt Zeiten, in denen Ihr Code Vorgänge im Namen eines anderen Benutzers ausführen muss. Wenn das Systemkonto, das Ihren Code ausführt, über die erforderlichen Berechtigungen verfügt, können Sie Vorgänge im Namen anderer Benutzer durchführen.
Anforderungen für den Identitätswechsel
Der Identitätswechsel wird verwendet, um die Geschäftslogik (Code) im Auftrag eines anderen Microsoft Dataverse-Benutzers auszuführen, um eine gewünschte Funktion oder einen Service mithilfe der entsprechenden rollen- und objektbasierten Sicherheit dieses benutzers auszuführen. Die Identitätswechsel sind erforderlich, da die Dataverse Webdienste von verschiedenen Clients und Diensten im Namen eines Dataverse Benutzers aufgerufen werden können, beispielsweise in einem Workflow oder einer benutzerdefinierten ISV-Lösung (Independent Software Vendor). Der Identitätswechsel betrifft zwei verschiedene Benutzerkonten: ein Benutzerkonto (A) wird bei der Ausführung von Code zur Ausführung einer Aufgabe im Auftrag eines anderen Benutzers (B) verwendet.
Benutzerkonto (A) benötigt die Berechtigung prvActOnBehalfOfAnotherUser
, die in der Sicherheitsrolle "Stellvertretung" enthalten ist. Die aktuelle Gruppe von Rechten, die verwendet wird, um Daten zu ändern, ist die Schnittmenge der Rechte, die der Stellvertreterbenutzer besitzt, und der des Benutzers, dessen Identität angenommen wird. In anderen Worten: Benutzer (A) kann nur dann etwas tun, wenn Benutzer (A) und der Benutzer (B), dessen Identität angenommen wird, über die dazu erforderlichen Rechte verfügen.
So wird die Identität eines Benutzers angenommen
Es gibt zwei Möglichkeiten, die Identität eines Benutzers anzunehmen. Beide sind durch die Übergabe eines Headers mit der entsprechenden Benutzer-ID möglich.
- Bevorzugt: Imitieren Sie einen Benutzer basierend auf seiner Microsoft Entra ID-Objekt-ID, indem Sie diesen Wert zusammen mit dem Header übergeben
CallerObjectId
. - Veraltet: Um die Identität eines Benutzers anhand seiner Systembenutzer-ID zu übernehmen, können Sie
MSCRMCallerID
mit dem entsprechenden GUID-Wert verwenden.
In diesem Beispiel wird im Namen des Benutzers eine neue Kontoentität mit einer Microsoft Entra ID-Objekt-ID e39c5d16-675b-48d1-8e67-667427e9c084
erstellt.
Anforderung:
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"}
Antwort:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-000000000003)
Bestimmen des tatsächlichen Benutzers
Wenn ein Vorgang wie das Erstellen einer Entität mithilfe von Identitätswechsel ausgeführt wird, können Sie den Benutzer finden, der den Vorgang tatsächlich ausgeführt hat, indem Sie den Datensatz einschließlich der createdonbehalfby
einwertigen Navigationseigenschaft abfragen. Eine entsprechende einwertigen modifiedonbehalfby
-Navigationseigenschaft ist für Vorgänge verfügbar, durch die die Entität aktualisiert wird.
Anforderung:
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
Antwort:
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"
}
}
Siehe auch
Annehmen der Identität eines anderen Benutzers
Die Identität eines anderen Benutzers mit dem SDK für .NET annehmen
Vorgänge mithilfe der Web-API ausführen
HTTP-Anforderungen verfassen und Fehler beheben
Abfragen von Daten mithilfe der Web-API
Erstellen einer Tabellenzeile über die Web-API
Abrufen einer Tabellenzeile über die Web-API
Aktualisieren und Löschen von Tabellenzeilen über die Web-API
Zuordnen und Aufheben der Zuordnung von Tabellenzeilen über die Web-API
Nutzen von Web-API-Funktionen
Web-API-Aktionen verwenden
Ausführen von Batchbetrieben mithilfe der Web-API
Bedingte Vorgänge mithilfe der Web-API ausführen
Hinweis
Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)
Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).