Токен Dynamics 365 Business Central

Я пытаюсь получить доступ к APIBusiness Central Admin Center , но у меня возникают некоторые трудности.

У меня есть идея, что это как-то связано с регистрацией приложения, которую я сделал на портале Azure.

Я (как пользователь-администратор арендатора) зарегистрировал приложение и предоставил ему «делегированные разрешения» для «Dynamics 365 Business Central» с доступом к «Financials.ReadWrite.All». Я также создал секрет для приложения.

Моя проблема в том, что когда я пытаюсь получить доступ к API центра администрирования, я получаю ответ «403 Forbidden», поэтому я предполагаю, что либо что-то забыл, либо неправильно создал регистрацию своего приложения, либо моя попытка получить доступ к API, выполняется в неаккуратном имении.

Если я попытаюсь проверить полученный токен, он не покажет разрешения, которые я ожидал и видел в других случаях (например, с MS Graph API), поэтому я думаю, что, возможно, проблема заключается в токене.

Вот код, который я использую для извлечения токена, и моя попытка использовать его впоследствии — может быть, кто-то заметит, что я делаю неправильно.

Получение токена

      var client_id = "removed_for_security_reasons";
var client_secret = "removed_for_security_reasons";
var tenant_id = "removed_for_security_reasons";

var token_url = "https://login.microsoftonline.com/" + tenant_id + "/oauth2/v2.0/token";

var client = new HttpClient();

var content = new StringContent(
    "grant_type=client_credentials"+
    "&scope=https://api.businesscentral.dynamics.com/.default"+
    "&client_id="+ HttpUtility.UrlEncode(client_id) +
    "&client_secret="+ HttpUtility.UrlEncode(client_secret));

content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");

var response = await client.PostAsync(token_url, content); 

// here i print the token so I can check it with jwt.io.

Попытка использовать токен

      var client = new HttpClient();

HttpRequestMessage req = new HttpRequestMessage();

req.Method = HttpMethod.Get;

req.RequestUri = new Uri("https://api.businesscentral.dynamics.com/admin/v2.11/applications/businesscentral/environments");
req.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
                "Bearer", access_token);

var res = await client.SendAsync(req);

// this results in "403 Forbidden"

Нет дополнительной информации о том, почему это запрещено, поэтому мне трудно определить, в чем проблема.

У кого-нибудь есть предложения?

ОБНОВЛЕНИЕ 1

Хорошо, поэтому я попытался следовать описанию, связанному. Он не описывает, какое поле разрешений проверять, а также использует PowerShell, которым я не являюсь - я использую C # с HttpClient.

Итак, чтобы больше не ходить вокруг да около, попробуйте объяснить, что выбрать здесь (см. изображения) и/или что не так/отсутствует.

Изображение 1 (приложение), что не так/отсутствует:

Изображение 2 (разрешения 1), что не так/отсутствует:

Изображение 3 (разрешения 2), что не так/отсутствует: (предоставление администратора, похоже, ничего не меняет)

После этого я создаю клиентский секрет и использую изначально опубликованный код. Потому что это не работает, как ожидалось. Если код неправильный, то укажите, в чем проблема - обращение к описанию в Интернете мне не поможет, так как оно в лучшем случае расплывчато.

0 ответов