调用Graph API访问OneDrive报错:User's mysite not found求助
User's mysite not found 咱们先拆解下你遇到的几个问题,核心根源其实是用户的OneDrive/MySite未被预配,具体分析和解决步骤如下:
核心问题定位
你调用GET /me时返回的provisionedPlans是空数组,这是关键信号:
provisionedPlans字段记录了用户已开通的Microsoft 365服务计划,OneDrive for Business对应的条目是类似{"capabilityStatus": "Enabled", "service": "SharePoint", "servicePlanName": "OneDrive for Business"}的内容。空数组说明用户的OneDrive服务根本没被开通/预配。
这直接导致了后续的两个错误:
GET /me/drive返回User's mysite not found:OneDrive完全依赖于用户的个人站点(MySite),没有预配MySite的话,这个端点自然找不到资源。GET /me?select=mySite返回UnauthorizedAccessException:这是个“假象”权限错误——因为MySite本身不存在,Graph API无法定位到这个资源,所以返回权限拒绝,而非真的你没有权限。
你的访问令牌里已经包含了Files.ReadWrite、MyFiles.Write等必要的OneDrive权限,所以权限本身不是问题,重点在服务预配。
解决步骤
1. 确认用户的Office 365许可证
首先检查该用户是否拥有包含OneDrive for Business的许可证(比如E3/E5、Business Premium、SharePoint Online Plan 1/2等)。如果用户没有对应许可证,需要先为其分配。
2. 手动触发MySite/OneDrive预配
很多时候新创建的用户不会自动预配OneDrive,需要管理员手动触发:
- 通过Microsoft 365管理中心操作:
登录管理中心 → 找到目标用户 → 进入用户详情页 → 切换到「OneDrive」标签 → 点击「创建OneDrive」按钮(如果显示的话)。 - 通过PowerShell命令预配(需要SharePoint Online管理员权限):
# 先连接到SharePoint Online Connect-SPOService -Url https://<your-tenant>-admin.sharepoint.com # 触发预配 Request-SPOPersonalSite -UserEmails "komal.hendre@raykor.com" -NoWait
3. 等待预配完成并验证
预配过程可能需要几分钟到几小时,完成后:
- 再次调用
GET /me,你会看到provisionedPlans里出现OneDrive相关的条目。 - 此时再调用
GET /me/drive,应该就能正常返回用户的OneDrive信息了。
4. 后续权限验证(可选)
如果预配完成后仍有问题,可以再次检查访问令牌的scp字段,确保包含Files.Read、Files.ReadWrite或Sites.Read.All等必要权限(你的令牌里已经包含这些,大概率不需要调整)。
内容的提问来源于stack exchange,提问作者mohit sharma

