MS Graph API me/messages端点返回ErrorAccessDenied权限问题求助
解决MS Graph API me/messages端点权限拒绝问题
以下是针对你的问题的具体解决步骤:
1. 明确端点权限差异
me/sendMail 仅需要 Mail.Send 委托权限,但创建草稿的 me/messages 端点要求 Mail.ReadWrite 委托权限(或更高权限)。你之前的权限配置大概率只包含了Mail.Send,导致调用新端点时权限不足。
2. 更新Azure AD应用注册的权限
- 登录Azure门户,找到你的应用注册
- 进入「API权限」页面,点击「添加权限」→「Microsoft Graph」→「委托权限」
- 搜索并添加 Mail.ReadWrite 权限
- 若为企业租户,需管理员点击「授予管理员同意」(若租户设置为用户无法自行同意权限)
3. 调整MSAL令牌请求的权限范围
调用MSAL获取令牌时,确保scope参数同时包含原有Mail.Send和新增的Mail.ReadWrite,示例C#代码:
var scopes = new[] { "https://graph.microsoft.com/Mail.Send", "https://graph.microsoft.com/Mail.ReadWrite" }; var result = await _publicClientApplication.AcquireTokenInteractive(scopes).ExecuteAsync();
4. 清理MSAL令牌缓存
MSAL会缓存旧令牌,若之前的令牌仅含Mail.Send权限,即使更新scope也可能复用旧令牌。解决方式:
- 关闭并重启WPF应用,清除本地MSAL缓存(通常位于用户目录下的.msal文件夹)
- 或在代码中调用MSAL的
RemoveAsync方法清除目标账户的缓存
5. 验证令牌权限
获取新令牌后,使用本地离线JWT解析工具解析令牌,检查scp字段是否包含Mail.ReadWrite:
- 若包含,说明权限已正确获取;若不包含,检查scope参数是否正确,以及权限是否已完成同意流程
6. 确认租户权限配置
由于你的账户为联合委托类型,需确认租户是否允许用户自行同意权限:
- 若租户禁用了用户自行同意,必须由Azure AD管理员完成权限的租户级同意
内容的提问来源于stack exchange,提问作者cWilson
相关产品推荐
相关产品推荐

