我正在尝试连接到Microsoft Dynamics Marketing OData数据服务。该页列出了用于只读访问的OData提要,但没有关于如何对其进行身份验证的任何信息。
我一直在尝试使用Microsoft.IdentityModel.Clients.ActiveDirectory -Version 1.0.4获取访问令牌,像这样:
var authenticationContext = new AuthenticationContext("https://login.windows.net/" + domainName);
var authenticationResult = authenticationContext.AcquireToken(resource, clientId, redirectUri);
var token = authenticationResult.AccessToken;
domainName
和contoso.onmicrosoft.com
很像,但我不知道clientId
, redirectUri
, resource
用什么。
我尝试了许多不同的组合,并出现了错误,例如:
invalid_request: AADSTS90027: The client 'xxxxxxxx-9068-486b-bdd2-dac26b8a5a7a' and resource 'Microsoft.DynamicsMarketing' identify the same application.
和
access_denied: AADSTS65005: The client application has requested access to resource 'Microsoft.DynamicsMarketing'. This request has failed because the client has not specified this resource in its requiredResourceAccess list.
我想我已经接近这个了。我在Azure AD中注册了一个应用程序作为本地客户端应用程序,并使用其clientId
和redirectUri
与Microsoft.DynamicsMarketing
作为资源。我从服务主体列表中发现了这一点,Get-MsolServicePrincipal
使用"Windows Azure活动目录模块用于Windows PowerShell"。
这些参数是正确的吗?我只需要在某种程度上整理许可,还是我走远了?
正确的resource
是https://marketing-infra.dynamics.com/
,它是列出的服务主体名称之一,就像之前我使用的Microsoft.DynamicsMarketing
一样。这适用于我从Fiddler从Power Query捕获的clientId
和redirectUri
。我很确定,要让它与我的客户端一起工作,我需要在Azure应用程序注册中赋予Dynamics Marketing权限,"其他应用程序的权限"。问题是Dynamics Marketing不是一个可以添加的应用程序,并且Dynamics CRM委托权限没有Dynamics Marketing的角色。
确实可以访问提要。但是你必须在Azure Active Directory中注册一个应用程序,并授权它访问Dynamics Marketing。
请查看我关于这个主题的博文-包括步骤和示例代码:-)
我还在GitHub上发布了PowerShell cmdlet,这样做是一种更通用的方式,不使用数据模型的代理类。PowerShell cmdlet可以跨OData和SDK访问MDM
我得到了微软的回答,除了Power Query之外的客户端不支持。因此,我上面的代码是正确的,并且还不支持添加与其他应用程序一起访问它的权限。