microsoft graph api для создания онлайн-собрания программно, но с ошибкой 403

#php #microsoft-graph-api #microsoft-graph-sdks #microsoft-graph-teams

#php #microsoft-graph-api #microsoft-graph-sdks #microsoft-graph-teams

Вопрос:

Я использую Microsoft Graph Api (PHP-> msGraph SDK) для создания онлайн-собраний. Я сталкиваюсь с ошибкой 403, может кто-нибудь мне помочь.

 $clientId = "***********************************";
$clientSecret = "***********************************";
$tenantId = '***********************************';
$responseUri = "http://localhost:8888/moodle39";



$guzzle = new GuzzleHttpClient();
$url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/v2.0/token';
$token = json_decode($guzzle->post($url, [
    'form_params' => [
        'client_id' => $clientId,
        'client_secret' => $clientSecret,
        'scope' => 'https://graph.microsoft.com/.default',
        'grant_type' => 'client_credentials',
    ],
])->getBody()->getContents());
$accessToken = $token->access_token;

//Create a new Graph client. 
$graph = new Graph(); 
$graph->setAccessToken($accessToken);

$onlinemeet->startDateTime = "2020-09-02T14:30:34.2444915";
$onlinemeet->endDateTime = "2020-09-02T15:30:34.2444915";
$onlinemeet->subject = "Test Meeting";
$jso = json_encode($onlinemeet);
$user = $graph->createRequest("POST", "/me/onlineMeetings")->addHeaders(array("Content-Type" => "application/json"))->attachBody($jso)->setReturnType(User::class) ->execute();
  

Исключение — Ошибка клиента: СООБЩЕНИЕhttps://graph.microsoft.com/beta/me/onlineMeetings в результате был получен запрещенный ответ 403: { «ошибка»: { «код»: «Запрещено», «сообщение»: «», «Внутренняя ошибка»: { «идентификатор запроса»: «bd43aa57-511e-4 (усеченный …)

При создании приложения на портале Azure

под разрешением API я дал разрешение на доступ

GraphAPI-> Делегированные разрешения-> онлайновые встречи.ReadWrite.

Может кто-нибудь помочь мне с правильным примером или правильным синтаксисом в PHP.

Спасибо !!..

Комментарии:

1. Я не вижу, чтобы вы добавляли какие-либо учетные данные в свой квест в своем коде.

2. проверьте вопрос. Я только что отредактировал вопрос с полным кодом. Спасибо @ewong!!

3. После просмотра кода я узнал, что вы используете поток проверки подлинности клиента и вызываете конечную точку «me / onlineMeetings». В основном, при аутентификации в качестве приложения вы не можете использовать делегированные разрешения — области, которые предоставляются пользователем. Таким образом, вы должны использовать разрешения приложения здесь. И, как мы видим в документации , разрешения приложения здесь не поддерживаются. Так вот почему вы получаете ошибку 403.

4. @Shiva-MSFTIdentity Спасибо за ваш ответ Да, я использую делегированные разрешения, если вы видите документацию, которой вы поделились со мной. Делегированные (рабочая или школьная учетная запись) онлайн-собрания. Поддержка ReadWrite. Если моя учетная запись является личной учетной записью, то она не работает. Но у меня была рабочая учетная запись, поэтому делегированные разрешения поддерживаются

5. Вы не используете делегированную аутентификацию. Строка 'grant_type' => 'client_credentials', указывает, что вы используете аутентификацию только для приложений. Здесь вам нужно выполнить поток авторизации пользователя, например, код аутентификации. Здесь есть руководство.

Ответ №1:

Вы не можете использовать поток учетных данных клиента, чтобы получить токен для вызова конечной точки / me. Что касается потока учетных данных клиента, он обычно используется для межсерверных взаимодействий, которые должны выполняться в фоновом режиме и не взаимодействовать с пользователем немедленно (пользователь не вошел в систему). Для конечной точки / me обычно требуется вход пользователя, поэтому вам следует использовать поток кода аутентификации.

Кстати, API в / бета версии Microsoft Graph могут быть изменены. Использование этих API в производственных приложениях не поддерживается. Поэтому рекомендуется использовать версию /v1.0.

введите описание изображения здесь

пожалуйста, смотрите:здесь.


Обновить:

Есть много похожих примеров, я надеюсь, что они смогут вам помочь:

Пример кода PHP OAuth 2.0.

Аутентификация и авторизация с использованием Auth0 в PHP.

Комментарии:

1. Не могли бы вы предоставить пример php (не Laravel) для потока кода аутентификации. Это будет более полезно.

2. @sreenumalae Привет, я обновил ответ, если мой ответ полезен для вас, вы можете принять его в качестве ответа (нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный.). Это может быть полезно для других участников сообщества.

3. Здравствуйте, ваш ответ мне очень помог. В моем коде, как только пользователь войдет в систему, я получу код, с помощью которого я получаю токен доступа. при этом я пытаюсь создать собрание, но получаю исключение ошибки — класс ‘User’ не найден в 156 из /mod/certificate/vendor/microsoft/microsoft-graph/src/Http/GraphResponse.php : Ошибка в строке 291 из /mod/certificate/vendor/microsoft/microsoft-graph/src/Http/GraphRequest.php : вызов Microsoft Graph Http GraphResponse-> getResponseAsObject() строка 128 из /mod/certificate/view.php : вызов Microsoft Graph Http GraphRequest-> выполнить()

4. @sreenumalae Привет, у меня нет возможности ответить вам в комментарии, потому что мне нужно, чтобы вы предоставили свой код для облегчения моего тестирования. Можете ли вы сначала принять этот ответ, а затем задать новый вопрос? Приложите свой код и сообщение об ошибке, я отвечу вам как можно скорее.

5. я решил проблему, большое спасибо за ваш быстрый ответ.