Токен 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), что не так/отсутствует: (предоставление администратора, похоже, ничего не меняет)
После этого я создаю клиентский секрет и использую изначально опубликованный код. Потому что это не работает, как ожидалось. Если код неправильный, то укажите, в чем проблема - обращение к описанию в Интернете мне не поможет, так как оно в лучшем случае расплывчато.