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

使用Microsoft Graph REST API上传文件至OneDrive遇错误求排查

问题分析与解决方案

你遇到的这个错误核心原因是授权流和API端点不匹配:

你用的是client_credentials(客户端凭据)授权流,这个流是基于应用身份运行的,不存在“当前登录用户”的上下文;但你调用的/drive/root端点是用来访问当前用户的默认OneDrive/文档库的——Graph API找不到对应的用户上下文,自然无法确定要访问哪个驱动器,所以抛出了"Unable to retrieve tenant service info"的错误。

针对性解决方案

1. 如果你要访问的是SharePoint站点的文档库(支持应用身份)

客户端凭据流适用于这种场景,但你需要指定具体的站点/驱动器,而不是依赖用户上下文:

  • 第一步:先获取目标站点的ID,比如通过站点名称搜索:
    GET https://graph.microsoft.com/v1.0/sites?search=你的站点名称
    
  • 第二步:用站点ID构造正确的上传URL,替换掉原来的/drive/root:
    PUT https://graph.microsoft.com/v1.0/sites/{你的站点ID}/drive/root:/test.txt:/content
    
  • 确保你的Azure AD应用已经添加了应用级权限(比如Sites.ReadWrite.All或Files.ReadWrite.All),并且完成了管理员同意。

2. 如果你要访问的是某个用户的个人OneDrive

客户端凭据流不支持访问个人OneDrive,你需要改用授权码流(Authorization Code Flow):

  • 这个流会引导用户登录授权,获取包含用户上下文的令牌,此时你原来的/drive/root端点就能正确指向该用户的OneDrive。
  • 对应的权限需要添加委托权限(比如Files.ReadWrite),用户授权后即可正常调用。

3. 额外检查点

  • 确认你的令牌中包含正确的权限:可以用jwt.ms解析令牌,查看roles字段是否包含你配置的应用权限(客户端凭据流的令牌里是roles,委托流是scp)。
  • 确保请求方法是PUT(上传/替换文件),而不是POST——Graph API中上传文件到指定路径用PUT方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:08:15