我尝试使用the library from krizalys来实现从OneDrive读取和写入文件的实现。它应该适用于企业帐户,但是如果它也可以适用于个人帐户,那就更好了。
由于我了解到krizalys示例中使用的Live SDK即将离线(as mentioned here),因此我尝试实现Microsoft Graph。
目前,我实现了两种获取访问令牌的方法,一种具有授予类型password
(getAccessToken Method from this sample used),一种具有client_credentials
(类似于krizalys lib) 。两者似乎都可以正常工作并返回access_token
和refresh_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'
],
]);
在https://apps.dev.microsoft.com上配置了应用程序,并设置了权限。我的要求有什么问题吗?我不知道为什么总是收到InvalidAuthenticationToken
消息。谢谢。
答案 0 :(得分:1)
您已经在v2端点(apps.dev.microsoft.com
)中注册了您的应用程序,但是您使用的示例代码是针对v1端点的。这些是不可互换的。另外,password
不是v2端点的有效OAuth授权(v2支持authorization_code
,implicit
和client_credentials
)
您需要从v2端点获取令牌。您可能会发现这些文章很有帮助: