API Graph Неправильный выбор данных

я использую Microsoft graph API получить мои сообщения из учетной записи Microsoft, используя php SDK (https://github.com/microsoftgraph/msgraph-sdk-php).

Мой пример кода приведен ниже

<?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;

Но это выдает ошибку, как показано ниже:

Неустранимая ошибка: Uncaught GuzzleHttp \ Exception \ ClientException: Ошибка клиента: GET https://graph.microsoft.com/v1.0/me/messages привело к 400 Bad Request response: {«error»: {«code»: «BadRequest», «message»: «Текущий аутентифицированный контекст недопустим для этого запроса. (усечено …) в C: \ wamp64 \ www \ graph_api \ vendor \ guzzlehttp \ guzzle \ src \ Exception \ RequestException.php в строке 113

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

Это из-за проблем с разрешением доступа к Graph API? У меня есть следующие разрешения, установленные в Microsoft app registration portal

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

Как и в лазурном портале

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

Что может вызвать эту проблему? Есть ли способ решить проблему?

0

Решение

Вы получаете исключение:

Текущий аутентифицированный контекст недопустим для этого запроса

поскольку полученный токен предназначен для разрешений приложений (поток учетных данных клиента). В этом потоке нет контекста для Me так как он представляет зарегистрированный пользовательский контекст.

Чтобы получить сообщения в потоке учетных данных клиента, пользователь должен быть явно разрешен в конечной точке:

https://graph.microsoft.com/v1.0/users/{user-id}/messages

пример

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]