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.

  1. Bevorzugt: Imitieren Sie einen Benutzer basierend auf seiner Microsoft Entra ID-Objekt-ID, indem Sie diesen Wert zusammen mit dem Header übergeben CallerObjectId.
  2. 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).