Oauth 2.0 如何根据Dynamics 365数据导出服务API进行身份验证?

Oauth 2.0 如何根据Dynamics 365数据导出服务API进行身份验证?,oauth-2.0,dynamics-crm,postman,dynamics-crm-online,data-export,Oauth 2.0,Dynamics Crm,Postman,Dynamics Crm Online,Data Export,我已经为Dynamics 365设置了一个名为的东西,以便它可以复制到Azure SQL数据库中。这是预期的工作 我正在尝试找到一种方法,如果此服务遇到任何错误,我会主动得到通知。通过CRM本身中的设置,似乎没有一种本机方法来实现这一点。介绍所有方法的招摇过市页面 我正在尝试使用Postman调用该方法: https://discovery.crmreplication.azure.net/crm/exporter/profiles?organizationId=4ef7XXXX-XXXX-XX

我已经为Dynamics 365设置了一个名为的东西,以便它可以复制到Azure SQL数据库中。这是预期的工作

我正在尝试找到一种方法,如果此服务遇到任何错误,我会主动得到通知。通过CRM本身中的设置,似乎没有一种本机方法来实现这一点。介绍所有方法的招摇过市页面

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

https://discovery.crmreplication.azure.net/crm/exporter/profiles?organizationId=4ef7XXXX-XXXX-XXXX-XXXX-XXXXXX8a98f&status=true
我在身份验证方面遇到问题,始终收到以下错误:

“消息”:“收到未经验证的请求Url”

我已在Azure中注册了一个应用程序,该应用程序有权代表经过身份验证的用户(在本例中是管理员)访问Dynamics 365

我已经在邮递员的授权选项卡上将类型设置为
OAuth 2.0
。我已针对上述应用程序成功地使用授权码的授予类型请求访问令牌。这为请求添加了一个标题:

键:授权
值:承载BIGLONGACCESSTOKEN

尽管这个标题存在,我仍然得到上面提到的错误

API文档暗示身份验证是
OAuth2隐式授权流
(单击文档中的任何红色感叹号),但我无法在Postman中实现这一点。当我尝试使用此方法请求令牌时,会出现以下错误:

不支持的\u响应\u类型

。。。在邮递员控制台

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


(如果C#示例更合适,我会接受,但如果Postman不能告诉我我需要什么,我会感到惊讶)

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

Azure配置

通过安装数据导出服务(并假设它全部正常工作),您将在Azure AD中有一个新的企业应用程序列为Crm Exporter

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

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

单击清单按钮编辑清单,将属性
oauth2AllowImplicitFlow
更改为
true
,然后保存更改

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

  • Microsoft Azure Active Directory
    • 授权权限
      • 登录并读取用户配置文件
  • 用于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


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

Azure配置

通过安装数据导出服务(并假设它全部正常工作),您将在Azure AD中有一个新的企业应用程序列为Crm Exporter

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

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

单击清单按钮编辑清单,将属性
oauth2AllowImplicitFlow
更改为
true
,然后保存更改

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

  • Microsoft Azure Active Directory
    • 授权权限
      • 登录并读取用户配置文件
  • 用于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