You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Microsoft Graph API邮件功能委托权限配置异常及权限不匹配求助

问题分析与解决方案

核心问题

你的应用在普通用户授权后仅获得User.Read、openid、profile和offline_access权限,根本原因是前端登录请求的权限范围(scopes)未包含邮件操作所需的Mail.ReadBasic和Mail.ReadWrite。管理员账号能正常运行,是因为管理员拥有更高权限,可自动跳过用户权限同意流程直接获取所有配置权限,但普通用户必须通过明确的权限请求才能获得对应权限。

解决方案步骤

1. 修正前端登录请求的权限范围

修改authConfig.ts中的loginRequest,添加邮件操作所需的委托权限:

export const loginRequest: PopupRequest = {
  scopes: ['User.Read', 'Mail.ReadBasic', 'Mail.ReadWrite'],
};

只有在登录请求中明确声明需要的权限,用户授权时才会看到对应的权限同意弹窗,进而授予这些权限。

2. 确认Entra ID中的应用权限配置

再次检查应用权限配置:

  • 确保User.Read、Mail.ReadBasic、Mail.ReadWrite是委托权限(而非应用权限),因为你需要以用户身份执行操作。
  • 确认权限状态为“已添加”,且组织未限制普通用户的权限同意(若有需要可联系管理员调整策略)。

3. 可选:增量权限请求优化体验

如果部分权限不是登录时必须的,可采用增量请求方式:用户首次登录仅请求User.Read,触发邮件操作时再动态申请邮件权限,示例代码如下:

// 用户触发邮件操作时调用
const request = {
  scopes: ['Mail.ReadBasic', 'Mail.ReadWrite'],
};

try {
  await msalInstance.acquireTokenPopup(request);
  // 执行邮件操作逻辑
} catch (error) {
  // 处理权限请求失败场景
}

这种方式能降低首次登录的权限弹窗复杂度,提升用户体验。

4. 测试验证

  • 让普通用户重新登录应用,确认出现包含邮件权限的同意弹窗。
  • 用户同意后,在Entra ID中查看该用户的已授予权限,确认Mail.ReadBasic和Mail.ReadWrite已被包含。
  • 执行邮件读取、移动等操作,验证功能正常运行。

权限匹配说明

你对邮件操作的权限匹配是正确的:

  • 读取邮件、文件夹列表:Mail.ReadBasic
  • 移动邮件、监听文件夹变更:Mail.ReadWrite

内容的提问来源于stack exchange,提问作者Chiril

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:27:54