PHP中的Office 365 API

11

我想为我的公司制作一个日历视图,以显示哪些员工可用。我在Azure中制作了一个应用程序,可以登录系统,获取访问令牌,但无法获取信息。

我使用curl构建请求网址,并在请求中发送此标题。

array(6) {
 [0]=>
  string(28) "User-Agent: php-tutorial/1.0"
  [1]=>
  string(588) "Authorization: Bearer ~ACCESS_TOKEN~"
  [2]=>
  string(24) "Accept: application/json"
  [3]=>
  string(55) "client-request-id: ~GUID~"
  [4]=>
  string(30) "return-client-request-id: true"
  [5]=>
  string(45) "X-AnchorMailbox: ~MAIL~"
}

我得到的唯一回应是:“ ”

我做错了什么?

更新

登录后,Microsoft不会询问我是否想要授予应用程序访问权限,但它确实授予了我访问令牌。这可能是问题所在吗?我该如何让它请求权限?

更新2

登录并尝试获取信息后,我收到401错误,显示:“拒绝访问”。这很奇怪,因为它已经授予我访问令牌。

更新3

几天过去了,我已经尝试了一些示例和教程代码来检查它是否能正常工作。但即使在这些应用程序中,API 似乎也无法工作。以下是我尝试过的项目。

https://github.com/microsoftgraph/php-connect-rest-sample

https://dev.outlook.com/restapi/tutorial/php


你正在使用哪个API? - Gary Liu
我尝试了不同的API:openid、mail.read、calendars.read、contacts.read。但奇怪的是,当我登录时它没有要求权限。 - apero
嗨,apero,你有没有尝试使用https://graph.microsoft.io/en-us/graph-explorer#来测试API,检查是否是权限问题? - Gary Liu
嗨,Gary,是的,那可以运行。并且它会询问我是否要授权该应用程序的权限。所以还有其他问题 :( - apero
请尝试访问以下链接以获取答案:http://stackoverflow.com/questions/37893089/requests-to-ms-graph-api-gives-me-authorization-request-denied-insufficient-p/37917392#37917392 - Gary Liu
感谢您帮助Gary。我没有访问PowerShell的权限。 - apero
2个回答

7
根据https://graph.microsoft.io/en-us/docs/overview/errors上的错误列表,当您收到401错误时,意味着所需的身份验证信息要么丢失,要么对资源无效。可能是您的访问令牌不包含应用程序请求的资源的范围。例如,如果您想列出日历视图的资源,并且根据https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/user_list_calendarview中的文档:
执行此API需要以下权限之一:Calendars.Read; Calendars.ReadWrite 请登录Azure AD应用程序门户,在Microsoft Graph下检查是否标记了Have full access to user calendarsRead user calendars权限。您可以使用访问令牌检查响应正文中的“scope”部分,有关更多信息,请参阅https://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-oauth-code/#use-the-authorization-code-to-request-an-access-token

抱歉回复晚了。这也没有帮助到我:( 请看我的更新问题。 - apero
你在使用curl函数时成功了吗?你能通过$error= curl_error($ch);获取到任何信息吗?你所说的“不起作用”是什么意思?你有收到任何信息吗? - Gary Liu
是的,curl函数成功了,我没有收到任何错误。$error为空。我得到了零信息,这就是非常令人困惑的地方。 - apero

0

这个问题很老了,但我会发布对我有用的解决方案。

和你一样,我苦于设置php客户端与Office365(Sharepoint)一起工作。官方文档缺乏示例(curls / requests / resposnes等),因此很难设置自定义客户端。

最后我找到了这个库:https://github.com/vgrem/phpSPO - 并且通过它,我成功地通过PHP进行了身份验证,并在Sharepoint中完成了我需要的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接