API Graph Неправильный выбор данных - PullRequest
0 голосов
/ 08 февраля 2019

Я использую 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: {"error": {"code":"BadRequest", "message": "Текущий аутентифицированный контекст недопустим для этого запроса. (Усечено ...) в C: \ wamp64 \ www \ graph_api \ vendor \ guzzlehttp \ guzzle \ src \ Exception \ RequestException.php на линии113

enter image description here

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

enter image description here

А также на лазурном портале

enter image description here

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

1 Ответ

0 голосов
/ 08 февраля 2019

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

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

, поскольку полученный токен предназначен для разрешений приложений ( учетные данные клиента)поток ).В этом потоке нет контекста для 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();
...