Как настроить Microsoft Graph (Bookings) API для веб-приложений в PHP (wordpress) - PullRequest
0 голосов
/ 19 июня 2020

Я новичок в 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

Сертификаты и секреты :

  • Секрет клиента: xxxxx

Разрешения API : (все предоставлены)

  • Bookings.Manage.All

  • Бронирования.Читать.все

  • Бронирования.ЧитатьЗаписать.Все

  • БронированиеЗаписать.ЧитатьЗаписать.Все

  • Календари.Читать

  • Календари.ЧитатьЗаписать

  • Пользователь.ЧитатьBasi c .Все

Может быть, все они мне не нужны?

Я также пробовал использовать phpleague / oauth2-client с 'Client Credentials Grant' но получил ту же ошибку.

Может быть, кто-то может помочь, я немного запутался: (

Обновление для ошибки «400 Bad Request»: как предполагалось там что-то не так в структуре запроса (скрытый символ в идентификаторе параметра).

...