使用 Web API 模拟其他用户

已完成

有时,您可能需要为另一个用户运行逻辑。 在 Microsoft Dataverse 的上下文中,您的逻辑将根据您模拟的用户,应用所有适当的角色和基于对象的安全性。 当您将外部系统与 Dataverse 解决方案集成在一起时,这种方法会特别有效,因为集成帐户是系统帐户,而不是实际调用请求的用户。

使用用户模拟实施 Web API 请求

当调用任何 Web API 方法时,您可以在消息头中提供 CallerObjectId,以表明您希望为该特定用户运行该消息。 本参数的值是他们的 Microsoft Entra ID 对象 ID。 Microsoft Entra 图形 API 提供了查询 Microsoft Entra 用户数据的方法。 有关详细信息,请参阅 Microsoft Entra ID 图形 API 参考

确定执行操作的用户

如果您需要查看实际为另一个用户执行操作的用户的 ID,可以查询记录的 createdonbehalfby 值,该值将包含本详细信息。 例如,如果要查看客户行是否是通过用户模拟而不是由实际用户创建的,可以使用以下查询来查询该客户记录,以比较它们的 createdbycreatedonbehalfby 值:

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": "",
    "systemuserid": "75df116d-d9da-e711-a94b-000d3a34ed47",
    "ownerid": "75df116d-d9da-e711-a94b-000d3a34ed47"
  },
  "createdonbehalfby": {
    "@odata.etag": "W/"2632445"",
    "fullname": "Actual User",
    "azureactivedirectoryobjectid": "",
    "systemuserid": "278742b0-1e61-4fb5-84ef-c7de308c19e2",
    "ownerid": "278742b0-1e61-4fb5-84ef-c7de308c19e2"
  },
  "owninguser": {
    "@odata.etag": "W/"2632435"",
    "fullname": "Impersonated User",
    "azureactivedirectoryobjectid": ",
    "systemuserid": "75df116d-d9da-e711-a94b-000d3a34ed47",
    "ownerid": "75df116d-d9da-e711-a94b-000d3a34ed47"
  }
}