Ошибка в получении токена доступа для azure хранилища ключей в Business Central? - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь отправить HTTP-запрос с различными параметрами в теле, но получаю сообщение «oauth2 error AADSTS90014: Тело запроса должно содержать следующий параметр:« grant_type »». Через Почтальона я могу получить токен доступа с теми же параметрами. Я не знаю, что я делаю здесь не так. Я также приложил скриншоты.

Если кто-нибудь может мне помочь.

JSONAddPair(vJsonObject, 'grant_type', 'client_credentials');
JSONAddPair(vJsonObject, 'client_id', 'client-id-here');
JSONAddPair(vJsonObject, 'client_secret', 'secret-here');
JSONAddPair(vJsonObject, 'scope', 'https://vault.azure.net/.default');
vJsonObject.WriteTo(Body);

URL := 'https://login.microsoftonline.com/' + DirectoryId + '/oauth2/v2.0/token';

vRequestContent.WriteFrom(Body);
vRequestContent.GetHeaders(vContentHeaders);
vContentHeaders.Clear();
vContentHeaders.Add('Content-Type', 'application/json');

vHttpRequestMessage.Method := 'POST';
vHttpRequestMessage.SetRequestUri(URL);
vHttpRequestMessage.Content := vRequestContent;

vHttpClient.Send(vHttpRequestMessage, vHttpResponseMessage);

vHttpResponseMessage.Content().ReadAs(ResponseText);
Message(ResponseText);

Отправить запрос через почтальона

ошибка сообщение

1 Ответ

0 голосов
/ 20 января 2020

Как сказал @juunas, вы должны публиковать данные формы, а не JSON. Попробуйте это:

URL := 'https://login.microsoftonline.com/' + DirectoryId + '/oauth2/v2.0/token';

vRequestContent.WriteFrom('grant_type=client_credentials&client_id=<client id here>&client_secret=<secret here>&scope=https://vault.azure.net/.default');
vRequestContent.GetHeaders(vContentHeaders);
vContentHeaders.Clear();
vContentHeaders.Add('Content-Type', 'application/x-www-form-urlencoded');

vHttpRequestMessage.Method := 'POST';
vHttpRequestMessage.SetRequestUri(URL);
vHttpRequestMessage.Content := vRequestContent;

vHttpClient.Send(vHttpRequestMessage, vHttpResponseMessage);

vHttpResponseMessage.Content().ReadAs(ResponseText);
Message(ResponseText);

Если вы получаете некоторые ошибки, такие как неверный секрет, pls url закодирует весь ваш HTTP-запрос.

update: эта проблема была решена, когда изменено тело запроса на простой текст

...