Laravel控制器中的Microsoft Graph API

问题描述 投票:0回答:1

我正在使用组织Outlook帐户。我的目的是在Laravel控制器中获取日历事件列表。我遵循的步骤:

  1. https://aad.portal.azure.com/中创建了简单应用程序。我得到了应用程序(客户端)ID,目录ID,clientSecrets,对象ID /租户ID,可用于登录并从Microsoft获得更多数据。

  2. 在Laravel web.php中创建的控制器] >>

        Route::get('/graph', 'microsoftapi@getCalendarData');
    
    1. [为laravel添加了Microsoft Graph SDK。 https://github.com/microsoftgraph/msgraph-sdk-php
      composer require microsoft/microsoft-graph
    
    1. 我的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链接!!!!

请详细回复我。.>

我正在使用组织Outlook帐户。我的目的是在Laravel控制器中获取日历事件列表。我遵循的步骤:在https://aad.portal.azure.com/中创建了简单的应用程序。我得到了...

您必须在Azure仪表板中的应用程序和api调用代码中都授予Calendars.Read和Calendars.ReadWrite权限。

参考链接:https://docs.microsoft.com/en-us/graph/permissions-referencehttps://docs.microsoft.com/en-us/graph/api/calendar-list-events?view=graph-rest-1.0&tabs=http

php laravel api controls microsoft-graph
1个回答
0
投票

您必须在Azure仪表板中的应用程序和api调用代码中都授予Calendars.Read和Calendars.ReadWrite权限。

© www.soinside.com 2019 - 2024. All rights reserved.