我为Dynamics 365设置了一个名为Data Export Service的内容,以便将其复制到Azure SQL数据库中。这是按预期工作的。
如果此服务遇到任何错误,我正在尝试主动通知。通过CRM本身的设置but they do provide an API似乎没有本地方法来实现这一点。 Swagger页面概述了所有方法can be found here。
我正在尝试使用Postman调用GetProfilesByOrganizationId方法:
https://discovery.crmreplication.azure.net/crm/exporter/profiles?organizationId=4ef7XXXX-XXXX-XXXX-XXXX-XXXXXX8a98f&status=true
我遇到身份验证问题,并且始终收到以下错误:
“消息”:“收到未经身份验证的requestRequest Url https://discovery.crmreplication.azure.net/crm/exporter/profiles?organizationId=4ef7XXXX-XXXX-XXXX-XXXX-XXXXXX8a98f&status=true”
我在Azure中注册了一个应用程序,该应用程序有权代表经过身份验证的用户访问Dynamics 365,在这种情况下,我是管理员。
我已在Postman的“授权”选项卡上将“类型”设置为OAuth 2.0
。我已成功使用授权类型授权代码对上述应用程序请求访问令牌。这为请求添加了标题:
密钥:授权
价值:持票人BIGLONGACCESSTOKEN
尽管存在此标题,我仍然会收到上述错误。
API文档意味着身份验证是OAuth2 Implicit Grant Flow
(单击文档中的任何红色感叹号)但我无法在Postman中使用它。当我尝试使用此方法请求令牌时,我收到错误:
unsupported_response_type
...在Postman控制台中。
如何在Postman中对此API进行身份验证(使用Implicit Grant?)?
(如果他们更合适,我会接受C#示例,但如果Postman无法告诉我我需要什么,我会感到惊讶)
答案 0 :(得分:1)
如果使用更新的方法更新了Microsoft 所显示的代码示例,并且Azure中没有记录的一些额外配置。
Azure配置
通过安装Data Export服务(假设它一切正常),您将在Azure AD中列出一个新的企业应用程序 Crm Exporter 。
要利用此应用程序并使用Data Export API进行身份验证,您必须配置自己的应用程序。
转到Azure AD中的“应用程序注册”选项卡,然后添加新的应用程序注册 为其命名并将Application类型设置为Native。重定向URI通常不重要,只要它有效。
点击清单按钮修改清单,将属性oauth2AllowImplicitFlow
更改为true
并保存更改。
唯一的其他重要配置是必需权限,应设置如下:
然后,您需要点击授予权限。
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'