使用MS Azure访问日历数据时遭遇权限拒绝问题求助
排查Microsoft Graph API权限拒绝(ErrorAccessDenied)问题
已知信息
配置详情
"Authority": "https://login.microsoftonline.com/", "Scope": ["https://graph.microsoft.com/.default"], "InstanceURL": "https://graph.microsoft.com/v1.0", API -> /users/{}/calendarView with start and end query
已配置应用程序权限及Calendar.Read.All权限,但调用API时返回错误:
{"error":{"code":"ErrorAccessDenied","message":"Access is denied. Check credentials and try again."}}
排查要点
确认管理员已授予权限同意
应用程序权限必须由管理员手动授予同意,仅在Azure AD应用注册中添加权限但未完成「授予管理员同意」操作的话,权限不会生效。前往Azure AD应用注册的「API权限」页面,确认Calendar.Read.All权限旁显示「已授予」状态。修复Authority配置并验证令牌权限
原始配置中的Authority缺少租户ID,正确格式应为https://login.microsoftonline.com/{your-tenant-id}/。获取令牌后,解析其payload部分,检查roles字段是否包含Calendar.Read.All:- 必须使用
client_credentials授权流程获取应用令牌 - 确保请求令牌时的
scope参数为https://graph.microsoft.com/.default,且租户ID正确
- 必须使用
校验API请求参数
- 替换
/users/{}/calendarView中的占位符{}为有效的用户ID(UPN或对象ID) - 确保
startDateTime和endDateTime参数符合ISO 8601格式,例如2024-05-01T00:00:00Z
- 替换
排除目标用户日历的私有设置
若目标用户的日历设置为完全私有,即使应用有Calendar.Read.All权限也可能被拒绝。可先尝试访问全局管理员的日历进行测试,确认是否为用户自身日历权限限制导致。确认权限类型正确
检查Azure AD中配置的Calendar.Read.All是应用程序权限,而非委托权限——委托权限无法用于client_credentials授权流程。
内容的提问来源于stack exchange,提问作者Pushpendra Singh Nathavat
相关产品推荐
相关产品推荐

