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

使用Graph API下载OneDrive文件遇404(User not found)问题求助

解决Microsoft Graph API调用404 "User not found"问题

核心原因及修复方案

1. 身份验证流与权限不匹配

  • 应用权限(Client Credentials流):
    • 必须使用目标用户的Object ID作为{user-id}(不能用邮箱别名、显示名,优先从Azure AD用户详情页复制Object ID)。
    • 应用需配置Files.Read.All或Files.ReadWrite.All的应用权限,且已完成管理员同意(全局管理员操作)。
  • 委派权限(Authorization Code流):
    • 无需指定{user-id},直接调用/me/drive/items/{item-id},此时身份为当前登录用户。

2. API端点路径错误

检查请求URL格式:

  • 访问个人OneDrive正确路径:https://graph.microsoft.com/v1.0/users/{user-object-id}/drive/items/{file-id}/content
  • 禁止用用户邮箱替代{user-object-id}(除非是未修改的主邮件地址,Object ID更可靠)。

3. 代码身份验证逻辑问题

确保应用权限流的令牌获取正确(以C#为例):

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "你的租户ID";
var clientId = "你的客户端ID";
var clientSecret = "你的客户端密钥";

var credential = new ClientSecretCredential(tenantId, clientId, clientSecret, new ClientSecretCredentialOptions
{
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
});

var graphClient = new GraphServiceClient(credential, scopes);

// 使用用户Object ID调用接口
var fileStream = await graphClient.Users["用户Object ID"].Drive.Items["文件ID"].Content.Request().GetAsync();

4. 目标用户OneDrive访问权限限制

  • 应用权限模式下:确认管理员未限制应用访问特定用户的OneDrive。
  • 委派权限模式下:当前登录用户需拥有该文件的访问权限(文件在自身OneDrive,或已被共享)。

快速排查步骤

  1. Graph Explorer验证:
    • 选择「应用权限」,添加Files.Read.All权限并获取令牌。
    • 调用GET https://graph.microsoft.com/v1.0/users/{user-object-id}/drive/root,若返回404,说明用户ID错误或权限未生效。
  2. 令牌解析检查:用JWT解码工具解析令牌,确认roles字段包含Files.Read.All(应用权限)或scp字段包含Files.Read(委派权限)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:23:19