使用Graph API获取mailFolders时出现Error Access denied错误如何处理?
问题解答
你遇到的报错可按以下优先级排查解决:
1. 权限与授权流校验
- 如果你使用的是带用户登录的委托授权流(如授权码流、隐式流):你已配置的
Mail.Read.Shared、Mail.ReadWrite.Shared委托权限是正确的,不需要额外配置应用层级的同类型权限。需要先确认两个核心点:- 租户管理员已完成该权限的管理员同意,你可以将获取到的Auth Token解码,确认
scp声明中包含上述两个权限之一 - 未使用客户端凭证流获取Token:客户端凭证流仅识别应用级权限,不会携带当前登录用户(Manager@acme.com)的身份上下文,配置的委托权限不会生效
- 租户管理员已完成该权限的管理员同意,你可以将获取到的Auth Token解码,确认
- 如果你希望直接用客户端凭证流无用户身份调用:不需要配置委托权限,直接给应用授予应用级的
Mail.Read或Mail.ReadWrite权限,完成管理员同意后即可调用所有同租户用户的邮箱接口
2. 邮箱共享权限配置
委托权限场景下,仅配置Azure AD的API权限是不够的,还需要给Manager@acme.com开放Tests@acme.com的邮箱访问权限,两种配置方式二选一即可:
- 共享整个邮箱:
- 管理员登录Exchange管理中心,找到Tests@acme.com的邮箱,在「邮箱委托」设置中,给Manager@acme.com授予「读取管理」或「完全访问」权限
- 或由Tests@acme.com本人打开Outlook,右键邮箱根节点,选择「文件夹权限」,添加Manager@acme.com并授予至少「审阅者」权限
- 仅共享收件箱文件夹:
由Tests@acme.com本人打开Outlook,右键「收件箱」文件夹,选择「属性」-「权限」,添加Manager@acme.com并授予至少「查看项目」权限
配置完成后等待5-10分钟权限生效,再调用接口即可正常返回结果。
内容的提问来源于stack exchange,提问作者Kylie
相关产品推荐
相关产品推荐

