Annehmen eines anderen Benutzerkontos mit Web API

Es gibt Zeiten, in denen Ihr Code im Namen eines anderen Benutzers Vorgänge 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. Dies ist erforderlich, da die Dataverse-Webdienste von verschiedenen Clients und Services im Auftrag eines Dataverse-Benutzers aufgerufen werden können, etwa in einem Workflow oder einer benutzerdefinierten ISV-Lösung. 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, um die Identität eines Benutzers anzunehmen. Beide sind möglich, indem ein Header mit der entsprechenden Benutzer-ID übergeben wird.

  1. Bevorzugt: Nehmen Sie die Identität eines Benutzers auf der Grundlage seiner Microsoft Entra ID-Objekt-ID an, indem Sie diesen Wert zusammen mit dem Header CallerObjectId übergeben.
  2. Legacy: Um die Identität eines Benutzers auf Grundlage der systemuserid anzunehmen, können Sie MSCRMCallerID mit dem entsprechenden guid-Wert nutzen.

In diesem Beispiel wird im Auftrag des Benutzers eine neue Firmenentität mit einer Microsoft Entra ID-Objekt-ID e39c5d16-675b-48d1-8e67-667427e9c084 erstellt.

Anforderung:

POST [Organization URI]/api/data/v9.0/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.0/accounts(00000000-0000-0000-000000000003)  

Bestimmen des tatsächlichen Benutzers

Wenn eine Vorgang wie das Erstellen einer Entität mithilfe des Identitätswechsels ausgeführt wird, kann der Benutzer, der den Vorgang tatsächlich ausgeführt hat, über die Abfrage des Datensatzes in der Einzelwert-Navigationseigenschaft createdonbehalfby abgerufen werden. 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.0/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.0/$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
Datenabfrage mit 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).