GraphAPI异常:仅可获取自身日历事件,无法读取其他用户日历事件
我是测试Azure目录的管理员,拥有自动创建的虚拟用户。使用以下请求可正常获取自身日历事件:
https://graph.microsoft.com/v1.0/users/iamtheadmin@w8tlt.onmicrosoft.com/calendar/events
但将请求URL中的邮箱替换为其他虚拟用户邮箱,尝试获取其日历事件时,Graph Explorer返回如下错误:
"code": "ErrorItemNotFound", "message": "The specified object was not found in the store."
需说明的是,这些虚拟用户的日历中存在多个事件,并非空日历。我已在Azure AD/应用注册/API权限中配置了相关权限,但仍未找到缺失的设置或权限。
可能的原因及解决步骤
权限范围或类型不匹配
确认配置的API权限是应用权限而非委托权限。委托权限仅能访问当前登录用户的数据,应用权限才允许以应用身份访问其他用户的资源。若用的是委托权限,即便你是管理员,也无法直接访问虚拟用户的日历(虚拟用户未完成授权操作)。
需确保添加的是Calendars.Read或Calendars.ReadWrite的应用权限,且已完成管理员同意。虚拟用户的标识是否正确
检查请求中的虚拟用户邮箱是否完全正确,包括域名部分。也可尝试用虚拟用户的对象ID替代邮箱发起请求,规避邮箱解析问题:https://graph.microsoft.com/v1.0/users/{user-object-id}/calendar/events对象ID可在Azure AD的用户列表中找到。
虚拟用户邮箱未完成初始化
自动创建的虚拟用户可能从未登录过Outlook或Exchange Online,未完成邮箱初始化。即便日历中有事件,Graph API也可能无法正确识别其日历资源。可让虚拟用户登录一次Outlook网页版,完成初始化后重试请求。日历默认权限限制
即便你是全局管理员,也可能被虚拟用户的日历权限阻止访问。默认情况下,其他用户对日历的访问权限可能是“仅忙/闲”或更低。可通过以下方式修改:- 以管理员身份登录Exchange Admin Center
- 找到对应虚拟用户的邮箱,进入“日历权限”设置
- 将管理员账户或全局管理员组的权限设置为“读取全部细节”或更高
Graph Explorer的登录上下文问题
确认在Graph Explorer中登录的是管理员账户,且使用应用权限上下文(而非委托权限上下文)。在Graph Explorer的“权限”面板中,勾选对应应用权限并完成管理员同意,切换到应用权限模式发起请求。
内容的提问来源于stack exchange,提问作者Bernard Polman

