Я столкнулся с проблемой при работе с аутентификацией Azure Active Directory. В частности, я получаю следующее сообщение об ошибке:
{"error":"invalid_request","error_description":"AADSTS900144: Тело запроса должно содержать следующий параметр: 'grant_type'.}
Вот контекст моего запроса:
Конечная точка: https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token Метод запроса: POST Заголовки: «Content-Type»: «application/x-www-form-urlencoded» Тело запроса:
{
"grant_type": "client_credentials",
"client_id": {client_id},
"client_secret": {client_secret},
"scope": "https://graph.microsoft.com/.default"
}
Может кто-нибудь подсказать мне, как правильно включить параметр «grant_type» в тело запроса? Будем очень признательны за любые примеры или идеи о том, что может быть причиной этой проблемы.
Заранее спасибо за вашу помощь!
Я убедился, что тело запроса включает другие необходимые параметры, но параметр «grant_type», похоже, отсутствует или указан неправильно.


Вы указываете: «Content-Type»: «application/x-www-form-urlencoded», но отправляете JSON.
Измените Content-Type на «application/json» или отправьте данные формы.
Ошибка произошла из-за того, что вы передали неверный тип контента при создании токена.
Первоначально я получил ту же ошибку:
Я согласен с @juunas: либо измените Content-Type to "application/json" и передайте данные json, ИЛИ Content-Type : application/x-www-form-urlencoded передайте тело как параметры POST, закодированные в форме.
Я передал тело в качестве параметров, как показано ниже, чтобы устранить ошибку:
https://login.microsoftonline.com/TENANTID/oauth2/v2.0/token
client_id:ClientID
client_secret:ClientSecret
grant_type:client_credentials
scope:https://graph.microsoft.com/.default

В противном случае вы также можете изменить Content-Type to "application/json" и передавать только данные JSON.
Привет @Rik, Что-то не работает должным образом с моим предложенным решением, поскольку я вижу отрицательный результат? Я хотел бы понять, если я что-то пропустил здесь.
@Rik, у тебя была возможность проверить приведенный выше ответ и решил ли он проблему?
Привет, я не минусовал это. У меня нет необходимого признания.
@Rik Можете ли вы проверить приведенный выше ответ и сообщить мне, решил ли он проблему?
должно быть наоборот: спецификация определяет «application/x-www-form-urlencoded», поэтому тело должно быть не JSON, а скорее последовательностью параметров POST, закодированных в форме.