401 - Подключение к D365 Finance and Operations с использованием OData и .Net - PullRequest
0 голосов
/ 11 июня 2018

Я довольно новичок в D365 Finance & Operations и наткнулся на Примеры сервисов Microsoft на GitHub .Я подумал, что это хорошее начало, чтобы попытаться подключить простое консольное приложение .NET C # к D365.Я знаю, что это интеграция с Dynamics AX, поэтому, если есть что-то конкретное для D365 Finance & Operation, пожалуйста, сообщите мне об этом.

Я зарегистрировал свой экземпляр D365 (не пробную версию) в Azure AD, создал секретключ, а также дал ему разрешения для Microsoft Dynamics ERP.Я также зарегистрировал приложение Azure AD в D365 (Системное администрирование> Настройка).

В своем решении .NET я обновил конфигурации, чтобы они соответствовали моим конфигурациям в Azure AD Tenant, идентификаторе клиента / приложения и D365 URI.

Когда я запускаю консольное приложение, я успешно создаю токен аутентификации типа bearer.Когда я пытаюсь получить доступ к данным, я получаю ошибку 401.Вот пример запроса и ответа, который я записал с помощью Fiddler.

GET https://xxxxx.sandbox.ax.dynamics.com/data/LegalEntities 
HTTP/1.1
OData-Version: 4.0
OData-MaxVersion: 4.0
Accept: application/json;odata.metadata=minimal
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services
Authorization: Bearer xxxxxxxxxx
Host: xxxxx.sandbox.ax.dynamics.com

HTTP/1.1 401 Unauthorized
Server: Microsoft-IIS/10.0
WWW-Authenticate: authorization_uri="https://login.windows.net/xxxxx/oauth2/authorize"
ms-dyn-fqhn: sms-dev-1-99efa75e-d745-4a64-9d27-a06f7b230253
ms-dyn-namespace: AxProdDevTest
ms-dyn-tenant: devtest-lcs-99efa75e-d745-4a64-9d27-a06f7b230253
ms-dyn-role: dev
ms-dyn-aid: 371cd53f-ee91-0004-d4f8-1e3791eed301
X-Powered-By: ASP.NET
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
p3p: CP="No P3P policy defined.  Read the Microsoft privacy statement at     https://go.microsoft.com/fwlink/?LinkId=271135"
Date: Mon, 11 Jun 2018 13:59:06 GMT
Content-Length: 0

Я заметил, что в ответе конкретно говорится, что политика P3P не определена.Может кто-нибудь пролить свет на это, пожалуйста?

Более того, есть ли какие-то конфигурации, которые мне не хватает?Мне удалось получить токен, так что связь есть.Похоже, у меня просто нет доступа к данным.

Спасибо

ОБНОВЛЕНИЕ - Добавлен исходный код, который я сейчас выполняю

string authHeader = string.Empty;
UriBuilder uri = new UriBuilder(ConfigurationManager.AppSettings["AzureUri"]);
AuthenticationContext authenticationContext = new AuthenticationContext(uri.ToString(), false);

string clientId = ConfigurationManager.AppSettings["ClientId"];
string clientSecret = ConfigurationManager.AppSettings["ClientSecret"];
ClientCredential clientCred = new ClientCredential(clientId, clientSecret);

Task <AuthenticationResult> authenticationResult = authenticationContext.AcquireTokenAsync(ConfigurationManager.AppSettings["DynamicsUri"], clientCred);
authHeader = authenticationResult.Result.CreateAuthorizationHeader();

Uri dataUri = new Uri(ConfigurationManager.AppSettings["DynamicsUri"] + "/data", UriKind.Absolute);
var context = new Resources(dataUri);

context.SendingRequest2 += new EventHandler<SendingRequest2EventArgs>(delegate (object sender, SendingRequest2EventArgs e) {
    e.RequestMessage.SetHeader("Accept", "application/json");
    e.RequestMessage.SetHeader("Authorization", authHeader);
});

foreach (var empEntity in context.Employees.Execute()){
    Console.WriteLine("Name: {0}", empEntity.Name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...