非管理员调用Microsoft Graph API获取其他用户邮箱权限问题
解决方案
1. 修正代码中的无效Scope
你的代码里存在一个拼写错误的无效Scope:"User-Mail.ReadWrite.All",这会导致权限请求异常。请将所有出现该字段的位置(登录和获取Token的Scope数组)替换为正确的"Mail.ReadWrite.All"。
修正后的Scope示例:
scopes: [ "Mail.Read", "Mail.Send", "User.Read", "User.Read.All", "Mail.ReadWrite.All", // 修正此处 "Mail.ReadWrite.Shared", "MailboxSettings.Read", "Mail.Read.Shared", ]
2. 执行租户范围的管理员同意
非管理员用户弹出权限审批提示的核心原因是:管理员仅完成了个人权限同意,而非租户级别的全局同意。请按以下步骤操作:
- 登录Azure门户,找到你的应用注册。
- 进入「API权限」页面,确认已添加所需的Microsoft Graph委托权限(例如
Mail.Read.All、User.Read.All,这些权限需要管理员批准)。 - 点击页面顶部的「授予管理员同意」按钮,使用管理员账号完成授权。此操作会将权限授予整个租户的所有用户,非管理员用户无需再单独审批。
3. 确认权限与API调用匹配
你调用的/users/{user-id}/mailFolders接口用于读取其他用户的邮箱,需确保权限匹配:
- 若要读取租户内任意用户的邮箱,需使用
Mail.Read.All委托权限(必须管理员批准)。 - 若仅读取共享给当前用户的邮箱,
Mail.Read.Shared权限即可(部分租户无需管理员批准)。
4. 验证配置正确性
- 检查
msalConfig中的clientId和authority(租户ID)是否为真实有效值,而非占位符。 - 在应用注册的「身份验证」页面,确认已正确配置SPA重定向URI(
http://localhost:3000),并启用了「ID令牌」和「访问令牌」。
完成以上步骤后,非管理员用户即可正常访问其他用户的邮箱,不会再出现管理员审批提示。
内容的提问来源于stack exchange,提问作者Javaria Gulzar
相关产品推荐
相关产品推荐

