#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.
пожалуйста, смотрите:здесь.
Обновить:
Есть много похожих примеров, я надеюсь, что они смогут вам помочь:
Комментарии:
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. я решил проблему, большое спасибо за ваш быстрый ответ.