Web API を使用して別のユーザーを偽装する

コードで別のユーザーに代わって操作を実行する必要がある場合もあります。 コードを実行しているシステム アカウントに必要な権限がある場合は、他のユーザーに代わって操作を実行できます。

偽装の要件

偽装は、Microsoft Dataverse ユーザーに代わってビジネス ロジック (コード) を実行し、偽装されるユーザーの適切なロール ベースとオブジェクトベースのセキュリティを使用して任意の機能やサービスを提供するために使用されます。 偽装が必要なのは、ワークフローやユーザー定義の ISV ソリューションなどで、Dataverse ユーザーに代わってさまざまなクライアントやサービスによって Dataverse Web サービスを呼び出すことができるためです。 偽装には 2 つの異なるユーザー アカウントが含まれ、1つのユーザー アカウント (A) が、もう一方のユーザー アカウント (B) に代わって何らかのタスクを行うコードの実行時に使用されます。

ユーザー アカウント (A) は、代理人セキュリティ ロールに含まれる prvActOnBehalfOfAnotherUser 特権を必要とします。 データ変更に使用される実際の特権のセットは、代理人の役割のユーザーが所有する特権と、偽装されたユーザーが所有する特権との共通部分です。 つまり、ユーザー (A) と偽装されたユーザー (B) が操作に必要な特権を持つ場合にのみ、ユーザー (A) は何かを実行できます。

ユーザーを偽装する方法

ユーザーを偽装することができる 2 つの方法がありますが、両方とも関連するユーザー ID でヘッダーを渡すことにより可能になります。

  1. 優先: Microsoft Entra ID オブジェクトの ID に基づき、その値を CallerObjectId ヘッダーと共に渡すことにより、ユーザーを偽装します。
  2. 従来: システム ユーザー ID に基づきユーザーを偽装するには、関連するグリッド値と共に MSCRMCallerID を活用することができます。

この例では、Microsoft Entra ID のオブジェクト ID e39c5d16-675b-48d1-8e67-667427e9c084 を持つユーザのために新しい取引先企業エンティティが作成されます。

要求:

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"}  

応答:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
OData-EntityId: [Organization URI]/api/data/v9.0/accounts(00000000-0000-0000-000000000003)  

実際のユーザーを確認する

偽装を使用してエンティティの作成などの操作を実行する場合、createdonbehalfby という単一値ナビゲーション プロパティを含むレコードを照会することによって、実際に操作を実行したユーザーを見つけることができます。 エンティティを更新する操作には、対応する modifiedonbehalfby 単一値ナビゲーション プロパティを使用できます。

要求:

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  

応答:

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"
  }
}

参照

もう一方のユーザーの偽装
.NET 用 SDK を使用して別のユーザーを偽装する
Web API を使用して演算を実行する
HTTP 要求の作成とエラーの処理
Web API を使用したクエリ データ
Web API を使用してテーブル行を作成する
Web API を使用してテーブルの行を取得する
Web API を使用したテーブル行の更新と削除
Web API を使用したテーブル行の関連付けと関連付け解除
Web API 関数の使用
Web API アクションの使用
Web API を使用してバッチ操作を実行する
Web API を使用する条件付き演算を実行する

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。