使用Microsoft Graph API读取其他用户日历事件时遇403错误
解决调用Microsoft Graph API读取其他用户日历返回403的问题
我来帮你排查这个头疼的403错误!Graph Explorer能正常获取结果,但自己调用就失败,通常是权限或身份验证的细节没匹配上,咱们一步步拆解:
1. 检查应用权限的配置差异
Graph Explorer背后用的是微软预先配置好的应用,权限范围和授权状态可能和你自己的应用不一样:
- 确认权限类型:如果是用户登录后调用(委托权限),你需要申请
Calendars.Read或Calendars.Read.Shared;如果是后台服务无用户登录调用(应用权限),得申请Calendars.Read.All。 - 检查权限授权状态:登录Azure AD的应用注册页面,找到你的应用,进入「API权限」标签,看看权限的状态是不是「已授予」。委托权限需要用户登录时授权,应用权限则需要全局管理员同意。
2. 验证Access Token的权限范围
你自己请求获取的access token可能缺少必要的权限,这是最常见的原因:
- 把你的access token复制到jwt.ms解码,查看
scopes字段里有没有包含对应的日历权限(比如Calendars.Read)。 - 如果没有,说明你请求token时的
scope参数写错了,比如应该是https://graph.microsoft.com/Calendars.Read,而不是其他无关的范围。
3. 确认目标用户的日历共享权限
即使API权限配置正确,目标用户的日历可能没开放访问权限:
- 委托场景:登录的用户需要有访问目标用户日历的权限——要么目标用户在Outlook里把日历共享给了该用户,要么该用户是Exchange/全局管理员(默认有访问所有日历的权限)。
- 应用场景:确保目标日历没有设置拒绝第三方应用访问的规则,同时应用权限
Calendars.Read.All已经被管理员同意。
4. 对比Graph Explorer的请求细节
把你自己的请求和Graph Explorer里的请求做对比:
- 检查URL是否完全一致(比如beta版本的路径有没有写错)。
- 确认请求头里的
Authorization格式是Bearer {你的token},没有拼写错误。 - 查看是否有其他必要的请求头(比如
Content-Type: application/json)被遗漏。
按照这个顺序排查,应该能找到问题所在!
内容的提问来源于stack exchange,提问作者Sanyam koul




