Microsoft Graph API в Laravel контроллере - PullRequest
0 голосов
/ 27 марта 2020

Я использую учетную запись организации Outlook. Моя цель - получить список событий календаря в контроллере Laravel. Шаги, за которыми я следовал:

  1. Создано простое приложение в https://aad.portal.azure.com/. Я получил идентификатор приложения (клиента), идентификатор каталога, clientSecrets, идентификатор объекта / идентификатор клиента, который можно использовать для входа в систему и для получения дополнительных данных от Microsoft.

  2. Создан контроллер в сети Laravel . php

    Route::get('/graph', 'microsoftapi@getCalendarData');
Добавлен Microsoft Graph SDK для laravel. https://github.com/microsoftgraph/msgraph-sdk-php
  composer require microsoft/microsoft-graph
My Laravel Код контроллера:
<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Jumbojett\OpenIDConnectClient;
use GuzzleHttp\Client;
use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;

class microsoftapi extends Controller
{
    public $accesstoken;

    public function __construct()
    {
        $guzzle = new Client();
        $tenantId = 'common';
        $url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token?api-version=1.0';
        $token = json_decode($guzzle->post($url, [
            'form_params' => [
                'client_id' => '*******************',///$clientId,
                'client_secret' => '*****************', // $clientSecret,
                'resource' => 'https://graph.microsoft.com/',
                'grant_type' => 'client_credentials',
            ],
        ])->getBody()->getContents());
        $this->accessToken = $token->access_token;

    }

    public function getCalendarData(){
        $graph = new Graph();
        $graph->setBaseUrl("https://graph.microsoft.com/")
               ->setApiVersion("v1.0")
               ->setAccessToken($this->accessToken); 
dd($graph);
        $user = $graph->createRequest("GET","/users/abc@***********.com/calendar/events")
                    ->addHeaders(array("Content-Type" => "application/json"))
                    ->setReturnType(\Microsoft\Graph\Model\User::class)
                    ->setTimeout("1000")
                    ->execute();   

        echo "Hello, I am $user->getGivenName() ";
    }

По dd($graph); токовому выходу Я получаю как:

Microsoft\Graph\Graph {#221 ▼
  -_accessToken: "eyJ0eXAiOiJKV1QiLCJub25jZSI6IjNueHRoZzZrMllaTVZsRTMzUmNHOVhMbG9TekJRcUhVTzRVY2xLanpGV1EiLCJhbGciOiJSUzI1NiIsIng1dCI6IllNRUxIVDBndmIwbXhvU0RvWWZvbWpxZmpZVSIsImtp ▶"
  -_apiVersion: "v1.0"
  -_baseUrl: "https://graph.microsoft.com/"
  -_proxyPort: null
}

Итак, я правильно получаю токен доступа , Но, если я прокомментировал dd как // dd($graph);, то getCalendarData не работает. Мой вывод:

GuzzleHttp\Exception\ClientException
Client error: `GET https://graph.microsoft.com/v1.0/users/abc@********.com/calendar/events` resulted in a `401 Unauthorized` response: {"error":{"code":"NoPermissionsInAccessToken","message":"The token contains no permissions, or permissions can not be un (truncated...)

Кто-нибудь знает, в чем проблема?

Пожалуйста, дайте мне знать детали .. Пожалуйста, не присылайте ссылки Microsoft, которые мне трудно понять !!! !!

Пожалуйста, ответьте мне детали ..

Снимок экрана разрешения: enter image description here

Ответы [ 3 ]

2 голосов
/ 30 марта 2020

На вашем снимке экрана показано, что разрешение администратора не было предоставлено для разрешений, установленных вами при регистрации приложения (статус «Не предоставлено для ...» в списке разрешений). Поскольку вы используете учетные данные клиента, применяются разрешения приложения (а не делегированные разрешения). Поскольку согласие администратора не было предоставлено, ваш токен не имеет действительных разрешений.

Вам необходим администратор клиента для go регистрации приложения и предоставления согласия администратора.

1 голос
/ 27 марта 2020

Я чувствую, что речь идет о разрешениях администратора, которые необходимо предоставить приложению для доступа к данным API. Перейдите по этой ссылке - https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent

0 голосов
/ 27 марта 2020

Вы должны предоставить разрешения Calendars.Read и Calendars.ReadWrite как в своем приложении на панели инструментов azure, так и в коде вызова API.

Ссылочная ссылка: https://docs.microsoft.com/en-us/graph/permissions-reference и https://docs.microsoft.com/en-us/graph/api/calendar-list-events?view=graph-rest-1.0&tabs=http

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...