使用Graph API为所有用户批量创建邮箱文件夹遇权限拒绝问题
解决为其他用户创建邮箱文件夹的Graph API权限问题
1. 切换权限类型:从委托权限改为应用权限
你当前用/me/mailFolders能正常工作,说明使用的是委托权限——这类权限仅允许操作授权用户自己的邮箱数据,无法跨用户操作。要给其他用户创建文件夹,必须改用应用权限:
- 所需权限:选择
MailboxSettings.ReadWrite.All(仅邮箱设置相关操作)或Mail.ReadWrite.All(全邮箱读写权限,按需选择最小权限) - 关键步骤:在Azure AD中给你的应用添加上述权限后,必须完成全局管理员同意,这类跨用户的权限需要管理员审批才能生效。
2. 修改API调用端点
放弃/me/mailFolders,改用目标用户的标识来构造端点:
POST /users/{user-id}/mailFolders # 或者用用户的UPN(用户主体名称) POST /users/{user-upn}/mailFolders
请求体格式和/me端点一致,比如:
{ "displayName": "自定义文件夹名称" }
3. 调整认证方式为客户端凭证流
因为使用应用权限,需要通过客户端凭证流获取访问令牌,而不是之前的授权码流:
- 调用Azure AD的令牌端点(
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token),传入以下参数:grant_type:client_credentialsclient_id: 你的应用IDclient_secret: 应用的客户端密钥(或用证书认证)scope:https://graph.microsoft.com/.default
4. 验证权限与端点
用Graph Explorer切换到「应用权限」模式,添加对应的权限并完成管理员同意后,测试调用目标用户的mailFolders创建接口,确认是否能成功创建文件夹。如果仍报错,检查:
- Azure AD中应用的权限是否已正确添加并完成同意
- 令牌是否包含对应的权限声明(可以用JWT解析工具查看
roles字段) - 目标用户的邮箱是否处于正常状态
内容的提问来源于stack exchange,提问作者Albert Lyubarsky
相关产品推荐
相关产品推荐

