使用Microsoft图形与PHP进行OneDrive文件访问

时间:2018-07-18 13:22:49

标签: php microsoft-graph onedrive

我尝试使用the library from krizalys来实现从OneDrive读取和写入文件的实现。它应该适用于企业帐户,但是如果它也可以适用于个人帐户,那就更好了。

由于我了解到krizalys示例中使用的Live SDK即将离线(as mentioned here),因此我尝试实现Microsoft Graph。

目前,我实现了两种获取访问令牌的方法,一种具有授予类型passwordgetAccessToken Method from this sample used),一种具有client_credentials(类似于krizalys lib) 。两者似乎都可以正常工作并返回access_tokenrefresh_token,但是当我尝试发出请求时,我收到消息:

  

“ InvalidAuthenticationToken [消息] =>访问令牌为空”

我请求的代码:

$data = array("name" => "test");
$url  = "https://graph.microsoft.com/v1.0/me/drive/root";
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $url, [
  'headers' => [
    'Authorization: Bearer ' . $this->_state->token->data->access_token,
    'Content-Type: application/json',
    'Content-Length: ' .strlen(json_encode($data))
   ],
   'body' => json_encode($data),
]);

我还尝试使用GET方法并添加了Host: graph.microsoft.com以确保这不是问题:

$url = "https://graph.microsoft.com/v1.0/me";
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', $url, [
  'headers' => [
    'Authorization: Bearer ' . $this->_state->token->data->access_token,
    'Host: graph.microsoft.com'
  ],
]);

令牌响应有效负载如下所示: enter image description here

https://apps.dev.microsoft.com上配置了应用程序,并设置了权限。我的要求有什么问题吗?我不知道为什么总是收到InvalidAuthenticationToken消息。谢谢。

1 个答案:

答案 0 :(得分:1)

您已经在v2端点(apps.dev.microsoft.com)中注册了您的应用程序,但是您使用的示例代码是针对v1端点的。这些是不可互换的。另外,password不是v2端点的有效OAuth授权(v2支持authorization_codeimplicitclient_credentials

您需要从v2端点获取令牌。您可能会发现这些文章很有帮助: