尝试连接到Microsoft Graph时“权限不足,无法完成操作”

时间:2019-06-29 22:36:19

标签: php symfony microsoft-graph guzzle azure-ad-graph-api

我想配置我的Symfony4应用程序以使用msgraph-sdk-php库阅读和发送电子邮件。

我的应用程序将从单个帐户读取和发送电子邮件,而我不想向其用户公开其密码。因此,我不会使用OAuth进行登录。

我的第一个经验是这段代码(用于检索邮箱用户配置文件):

<?php

namespace App\Graph;

use Microsoft\Graph\Exception\GraphException;
use Microsoft\Graph\Graph;
use Microsoft\Graph\Model\User;

class GraphService
{
    function sentTestMessage() {
        $userId = "************************************";
        $tenantId = "************************************";
        $clientId = "************************************";
        $clientSecret = "***************************";


        $guzzle = new \GuzzleHttp\Client();
        $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());
        $accessToken = $token->access_token;


        $graph = new Graph();
        $graph->setAccessToken($accessToken);

        $user=new \stdClass();
        try {
            $user = $graph->createRequest("GET", "/users/".$userId)
                ->setReturnType(User::class)
                ->execute();
        } catch (GraphException $e) {
            $user->getGivenName=$e->getMessage();
        }

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

    }
}

但随后Symfony向我显示此消息的异常页面:

  

客户端错误:GET https://graph.microsoft.com/v1.0/users/...导致403 Forbidden响应:

     

{

     

“错误”:{

     

“代码”:“ Authorization_RequestDenied”,

     

“ message”:“权限不足,无法完成操作(被截断...)

现在,在具有相同用户登录名的https://developer.microsoft.com/en-us/graph/graph-explorer中运行时,相同的查询有效。

这些是我授予应用程序的权限:

enter image description here

我该如何解决上述问题?

1 个答案:

答案 0 :(得分:1)

您使用客户端凭据流在代码中获取访问令牌,因此您需要application permission而不是委派权限。

enter image description here