Dynamics CRM 2016 本地 API 身份验证

Dynamics CRM 2016 On-Premises API Authentication

我们的设置包括采用 ADFS 的 IFD 配置中的本地 CRM 2016。我们也有几个嵌入在 CRM 中的 iframe 中的自定义 Web 应用程序。我们的 Web 应用程序是 .NET 4.7 上 IIS 中的 MVC 运行,并使用 WS-Federation IIS 模块进行身份验证。这提供了一种非常无缝的体验,嵌入式应用程序在用户已经登录到 CRM 后进行进出 ADFS 的重定向以对用户进行身份验证。

我们的应用程序还调用我们创建的 APIs,后者又使用 OData 调用 Dynamics CRM web API。我们的 API 设置为以部署时选择的特定用户身份调用 CRM 网络 API(这有点难看,但它有效)。这会导致将创建的实体与实际用户相关联的问题,因为 CRM 认为它们是由用户在 API 部署中创建的。我们需要解决这个问题,以便将用户身份验证从我们的 Web 应用程序传递到我们的 API,然后传递到 CRM OData API。

通过搜索该站点和其他资源,我确定这对于 WS-Federation 是不可能的,我需要使用 OIDC。但是,我找到的关于以这种方式使用 OIDC 的所有文档都涉及使用 Azure Active Directory 和 Dynamics 365,这不适用于我的场景。我还没有找到有关配置本地 CRM 2016 实例或 ADFS 的任何信息。

对于全本地部署,这是如何完成的?

To impersonate a user, set the CallerId property on an instance of OrganizationServiceProxy before calling the service’s Web methods.

通过https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/developer/org-service/impersonate-another-user

或者

To impersonate a user based on their systemuserid you can leverage MSCRMCallerID with the corresponding guid value.

通过https://docs.microsoft.com/en-us/powerapps/developer/data-platform/webapi/impersonate-another-user-web-api

虽然我不能保证它在8.1及以下版本中都能正常工作。