问题描述
我正在使用Microsoft Graph Api(PHP-> msGraph SDK)创建在线会议。 我面临403错误,有人可以帮助我。
$clientId = "***********************************";
$clientSecret = "***********************************";
$tenantId = '***********************************';
$responseUri = "http://localhost:8888/moodle39";
$guzzle = new \GuzzleHttp\Client();
$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();
异常-客户端错误:POST https://graph.microsoft.com/beta/me/onlineMeetings导致403禁止响应:{“ error”:{“ code”:“ Forbidden”,“ message”:“”,“ innerError”:{ “ request-id”:“ bd43aa57-511e-4(已截断...)
在Azure门户中创建应用程序时
在API许可下,我授予了访问权限
GraphApi->委派权限-> onlinemeetings.ReadWrite。
有人可以在PHP中提供正确的示例或正确的语法来帮助我。
谢谢!! ..
解决方法
您不能使用client credential flow来获取令牌来调用 / me 端点。对于客户端凭证流,它通常用于必须在后台运行且不能立即与用户进行交互(无用户登录)的服务器到服务器交互。对于 / me 端点,通常是要求用户登录,因此应使用auth code flow。
顺便说一句,Microsoft Graph中 / beta 版本下的API可能会发生变化。不支持在生产应用程序中使用这些API。因此,建议您使用 /v1.0 版本。
请参阅:here。
更新:
有很多类似的示例,希望它们能为您提供帮助: