Web API を使用して別のユーザーを偽装する
コードで別のユーザーに代わって操作を実行する必要がある場合があります。 コードを実行しているシステム アカウントに必要な権限がある場合は、他のユーザーに代わって操作を実行できます。
偽装の要件
偽装は、Microsoft Dataverse ユーザーに代わってビジネス ロジック (コード) を実行し、偽装されるユーザーの適切なロール ベースとオブジェクトベースのセキュリティを使用して任意の機能やサービスを提供するために使用されます。 偽装が必要なのは、たとえばワークフローやカスタムISV (独立系ソフトウェア ベンダー) ソリューションで、さまざまなクライアントやサービスがユーザーに代わってWebサービスを呼び出すことができるためです。 Dataverse Dataverse 偽装には 2 つの異なるユーザー アカウントが含まれ、1つのユーザー アカウント (A) が、もう一方のユーザー アカウント (B) に代わって何らかのタスクを行うコードの実行時に使用されます。
ユーザー アカウント (A) は、代理人セキュリティ ロールに含まれる prvActOnBehalfOfAnotherUser
特権を必要とします。 データ変更に使用される実際の特権のセットは、代理人の役割のユーザーが所有する特権と、偽装されたユーザーが所有する特権との共通部分です。 つまり、ユーザー (A) と偽装されたユーザー (B) が操作に必要な特権を持つ場合にのみ、ユーザー (A) は何かを実行できます。
ユーザーを偽装する方法
ユーザーを偽装する方法は2つあり、どちらも対応するユーザーIDを含むヘッダーを渡すことによって可能になります。
- 推奨: IDオブジェクトIDに基づいてユーザーを偽装し、その値をヘッダーとともに渡します。 Microsoft Entra
CallerObjectId
- レガシー: systemuseridに基づいてユーザーを偽装するには、
MSCRMCallerID
対応するguid値を使用できます。
この例では、 Microsoft Entra IDオブジェクトID e39c5d16-675b-48d1-8e67-667427e9c084
を持つユーザーに代わって新しいアカウント エンティティが作成されます。
要求:
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"}
応答:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-000000000003)
実際のユーザーを確認する
偽装を使用してエンティティの作成などの操作を実行する場合、 createdonbehalfby
単一値ナビゲーション プロパティを含むレコードをクエリすることで、実際に操作を実行したユーザーを見つけることができます。 エンティティを更新する操作には、対応する modifiedonbehalfby
単一値ナビゲーション プロパティを使用できます。
要求:
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
応答:
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"
}
}
参照
もう一方のユーザーの偽装
.NET 用 SDK を使用して別のユーザーを偽装する
Web API を使用して演算を実行する
HTTP 要求の作成とエラーの処理
Web APIを使用してデータをクエリする
Web API を使用してテーブル行を作成する
Web API を使用してテーブルの行を取得する
Web API を使用したテーブル行の更新と削除
Web API を使用したテーブル行の関連付けと関連付け解除
Web API 関数の使用
Web API アクションの使用
Web API を使用してバッチ操作を実行する
Web API を使用する条件付き演算を実行する
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。