图谱API无法正确检索数据

Cra*_*fan 1 php api microsoft-graph microsoft-graph-sdks

我正在使用(https://github.com/microsoftgraph/msgraph-sdk-php)Microsoft graph API从Microsoft帐户检索我的邮件.php SDK

我的代码示例如下

<?php

// Autoload files using the Composer autoloader.
require_once __DIR__ . '/vendor/autoload.php';

use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;


    //get the access token to access graph api
    $tenantId = "XXXXXX";
    $clientId = "XXXXXXXXXXXX";
    $clientSecret = "XXXXXXXXXXX";

    $guzzleClient = new \GuzzleHttp\Client(array('curl' => array( CURLOPT_SSL_VERIFYPEER => false)));
    $url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token?api-version=1.0';
    $token = json_decode($guzzleClient->post($url, [
        'form_params' => [
            'client_id' => $clientId,
            'client_secret' => $clientSecret,
            'resource' => 'https://graph.microsoft.com/',
            'grant_type' => 'client_credentials',
        ],
    ])->getBody()->getContents());
    $accessToken = $token->access_token;

    //get the messages of user
    $graph = new Graph();
    $graph->setAccessToken($accessToken);

    $messages = $graph->createRequest("GET", "/me/messages")
                    ->setReturnType(Model\User::class)
                    ->execute();
    print_r($messages); exit;
Run Code Online (Sandbox Code Playgroud)

但它会引发我的错误,如下所示:

致命错误:未捕获GuzzleHttp\Exception\ClientException:客户端错误:GET https://graph.microsoft.com/v1.0/me/messages导致400 Bad Request响应:{"error":{"code":"BadRequest","message":"当前经过身份验证的上下文对此请求无效.(截断. ..)在第113行的C:\ wamp64\www\graph_api\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php

在此输入图像描述

这是因为访问Graph API有任何权限问题吗?我在中设置了以下权限Microsoft app registration portal

在此输入图像描述

以及在天蓝色的门户网站

在此输入图像描述

什么可能导致这个问题?有什么方法可以解决问题吗?

Vad*_*hev 5

你得到了例外:

当前经过身份验证的上下文对此请求无效

因为获取的令牌用于应用程序权限(客户端凭证流).在此流程中,没有上下文,Me因为它表示已登录的用户上下文.

要在客户端凭据中获取消息,需要在端点中显式解析用户:

https://graph.microsoft.com/v1.0/users/{user-id}/messages 
Run Code Online (Sandbox Code Playgroud)

$userId = "--user-id-goes-here--";

$messages = $graph->createRequest("GET", "/users/{$userId}/messages")
    ->setReturnType(\Microsoft\Graph\Model\User::class)
    ->execute();
Run Code Online (Sandbox Code Playgroud)