0

我为 Dynamics 365 设置了名为Data Export Service的东西,以便将其复制到 Azure SQL 数据库中。这按预期工作。

如果此服务遇到任何错误,我正在尝试找到一种主动通知的方法。似乎没有通过 CRM 本身的设置来执行此操作的本地方法,但它们确实提供了 API可以在这里找到概述所有方法的 Swagger 页面。

我正在尝试使用 Postman 调用GetProfilesByOrganizationId方法:

https://discovery.crmreplication.azure.net/crm/exporter/profiles?organizationId=4ef7XXXX-XXXX-XXXX-XXXX-XXXXXX8a98f&status=true

我遇到了身份验证问题,并且总是收到以下错误:

“消息”:“收到未经身份验证的请求请求 URL https://discovery.crmreplication.azure.net/crm/exporter/profiles?organizationId=4ef7XXXX-XXXX-XXXX-XXXX-XXXXXX8a98f&status=true

我在 Azure 中注册了一个应用程序,该应用程序有权代表经过身份验证的用户访问 Dynamics 365,在这种情况下,我是管理员。

我已在OAuth 2.0Postman 的 Authorization 选项卡上将 Type 设置为。我已成功针对上述应用程序使用授权类型的授权代码请求访问令牌。这为请求添加了一个标头:

Key:授权
值: Bearer BIGLONGACCESSTOKEN

尽管存在此标头,但我仍然收到上述错误。

API 文档暗示身份验证是OAuth2 Implicit Grant Flow(单击文档中的任何红色感叹号),但我无法在 Postman 中使用它。当我尝试使用此方法请求令牌时,出现错误:

unsupported_response_type

...在邮递员控制台中。

任何想法如何在 Postman 中针对此 API 进行身份验证(使用隐式授权?)?

(如果它们更合适,我会接受 C# 示例,但如果 Postman 不能向我展示我需要的东西,我会感到惊讶)

4

1 回答 1

2

如果使用更新的方法和 Azure 中未记录的一些额外配置进行更新,Microsoft 显示的代码示例似乎可以工作。

Azure 配置

通过安装数据导出服务(并假设一切正常),您将在 Azure AD 中以Crm Exporter的形式列出一个新的企业应用程序。

要利用此应用程序并使用数据导出 API 进行身份验证,您必须配置自己的应用程序。

转到 Azure AD 中的应用注册选项卡并添加新的应用程序注册。
为其命名并将应用程序类型设置为 Native。只要重定向 URI 有效,它通常并不重要。

单击清单按钮以编辑清单,将属性更改oauth2AllowImplicitFlowtrue并保存更改。

唯一的其他重要配置是必需的权限,应设置如下:

  • Windows Azure 活动目录
    • 委托权限
      • 登录并阅读用户资料
  • Microsoft Dynamics 365 的数据导出服务(Crm 导出器)
    • 委托权限
      • 有权访问 Microsoft Dynamics 365 API 的数据导出服务

然后,您需要单击授予权限

C# 更改

更新后的方法如下所示:

using Microsoft.IdentityModel.Clients.ActiveDirectory;

string clientId = "11cfXXXX-XXXX-XXXX-XXXX-XXXXXXXXd020";
string user = "my.username@domain.com";
string password = "PASSWORD";

var authParam= await AuthenticationParameters.CreateFromResourceUrlAsync(
    new Uri("https://discovery.crmreplication.azure.net/crm/exporter/aad/challenge")
);

var context = new AuthenticationContext(authParam.Authority, false);

var credentials = new UserPasswordCredential(user, password);

var token = await context.AcquireTokenAsync(authParam.Resource, clientId, credentials).AccessToken;

您现在可以通过提供令牌作为标头来查询数据导出 API:

授权:承载eJ0y........Hgzk

curl -X GET --header 'Accept: application/json' 'https://discovery.crmreplication.azure.net/crm/exporter/profiles?organizationId=MyOrgId&status=true'
于 2018-01-17T14:15:28.920 回答