Microsoft图形API以编程方式创建在线会议,但遇到403错误

问题描述

我正在使用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 版本。

enter image description here

请参阅:here


更新

有很多类似的示例,希望它们能为您提供帮助:

OAuth 2.0 PHP Sample Code

Authentication and Authorization Using Auth0 in PHP