我一直在尝试使用MS图API访问用户的数据。我一直在遵循官方文档,我已经正确配置了应用程序和权限。
我也在遵循这个code_sample,使用它我已经能够获取应用程序的守护进程令牌。
使用令牌,我能够成功地针对以下端点获取数据:
https://graph.microsoft.com/v1.0/users/204e3e4f-xxxx-xxxx-xxxx-509934e1
数据看起来像:
{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users/$entity","businessPhones":[],"displayName":"developers@outlook.com Tiwari","givenName":"developers@outlook.com","jobTitle":null,"mail":null,"mobilePhone":null,"officeLocation":null,"preferredLanguage":null,"surname":"Tiwari","userPrincipalName":"developers_outlook.com#EXT#@webdevelopers.onmicrosoft.com","id":"204e3e4f-x-xxxxx-xxxxxxx-509934e14fa8"}
然而,我无法获取更多的数据。即使我检查了应用程序的所有应用程序权限,所有其他端点也会抛出401未授权异常。
我正试图达到以下端点来获取上述用户的日历:
https://graph.microsoft.com/v1.0/users/204e3e4f-xxxx-xx-xxxxz-509934e14fa8/calendar
https://graph.microsoft.com/v1.0/users/204e3e4f-xxx-xxx-xxxxx-509934e14fa8/calendars
两者都给出401。
有人能建议我是否遗漏了什么吗。我甚至反编译了我的jwt令牌,它清楚地显示了添加的所有以下范围:
"roles": [
"Schedule.ReadWrite.All",
"OnlineMeetings.Read.All",
"Mail.ReadWrite",
"OnlineMeetings.ReadWrite.All",
"User.ReadWrite.All",
"Calendars.Read",
"Mail.ReadBasic.All",
"Files.ReadWrite.All",
"User.Read.All",
"Schedule.Read.All",
"Files.Read.All",
"Organization.ReadWrite.All",
"Mail.Read",
"Calendars.ReadWrite",
"Mail.Send",
"Organization.Read.All",
"Mail.ReadBasic"
],
请帮忙。
要访问日历事件,您应该调用以下端点:
GET /users/{id | userPrincipalName}/events
日历的文档如下:https://learn.microsoft.com/en-us/graph/api/user-list-events
根据您对Chris Johnson回答的评论,您使用的是个人帐户。仅限应用程序的代币无法访问个人账户,而且你甚至不应该使用个人账户获得代币,因为没有管理员的概念。
应用程序只需要管理员同意,当她同意时,她会授予对租户所有资源的访问权限。个人账户不在工作/学校租户中,因此不在范围内。即使你在工作/学校租户中添加了该个人帐户作为访客,他们的日历也会在租户之外托管,并且是禁止的。