Я новичок в Microsoft Graph API и борюсь с его правильной настройкой (использование с WebApplication без маски входа ), поэтому некоторые ошибки перечислены ниже вниз с указанным кодом c.
Моя цель - получить календарную информацию зарегистрированного пользователя MS-Teams из моего веб-приложения (плагин wordpress через PHP в бэкэнде), обновите представление календаря во внешнем интерфейсе и отправьте POST обратно bookingsAppointment пользователю через Bookings-API (через Backend).
Я сейчас пробую это из a локальный компьютер и локальный wordpress (через localhost ...). Я уже выполнил это с помощью учетной записи пользователя, вошедшего в систему (показывая маску входа в MS во внешнем интерфейсе, и теперь хочу обрабатывать токен-процесс в бэкэнде, чтобы пользователи внешнего интерфейса не заметили).
Моя проблема теперь в том, что я получал сообщение «Авторизация отклонена»
Uncaught GuzzleHttp\Exception\ClientException: Client error: `GET https://graph.microsoft.com/beta/bookingBusinesses?select=id` resulted in a `401 Unauthorized`
из следующего кода (пример кода):
$url = 'https://login.microsoftonline.com/{tenant-ID}/oauth2/v2.0/token';
$data = array(
'client_id' => 'xxxxxx-xxxxxx-xxxxxx-xxxxxx',
'client_secret' => 'xxxxxx',
'grant_type' => 'client_credentials',
'scope' => 'https://graph.microsoft.com/.default'
);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
тогда я нашел этот ответ и изменил код (пример кода) на этот:
$url = 'https://login.microsoftonline.com/{tenant-ID}/oauth2/v2.0/token';
$data = array(
'client_id' => 'xxxxxx-xxxxxx-xxxxxx-xxxxxx',
'client_secret' => 'xxxxxx',
'grant_type' => 'password',
'resource' => 'https://graph.microsoft.com',
'username' => 'Firstname Lastname/test.this@foo.bar',
'password' => 'xxxxxxx'
);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
В результате получена следующая ошибка :
file_get_contents(): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
Это означает, что я делаю что-то не так в запросе, но я также предполагаю, что я, возможно, испортил «настройку» своего приложения (после многих попыток на портале. azure часть «зарегистрировать приложение».)
Мое текущее зарегистрированное приложение:
Обычное :
Авторизация :
- перенаправление: http://localhost: {порт} / sample-page /
- неявно гран t: токен доступа
- Аккаунты в любой организации.
- Standardclienttype: no
Сертификаты и секреты :
Разрешения API : (все предоставлены)
Bookings.Manage.All
Бронирования.Читать.все
Бронирования.ЧитатьЗаписать.Все
БронированиеЗаписать.ЧитатьЗаписать.Все
Календари.Читать
Календари.ЧитатьЗаписать
Пользователь.ЧитатьBasi c .Все
Может быть, все они мне не нужны?
Я также пробовал использовать phpleague / oauth2-client с 'Client Credentials Grant' но получил ту же ошибку.
Может быть, кто-то может помочь, я немного запутался: (
Обновление для ошибки «400 Bad Request»: как предполагалось там что-то не так в структуре запроса (скрытый символ в идентификаторе параметра).