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

Microsoft Graph API访问外部共享内容时遇404错误求助

解决方案:Graph API访问外部共享文件夹返回404 (itemNotFound)

问题核心

服务账号通过/me/drive/sharedWithMe?allowexternal=true能获取到外部租户用户共享的文件夹条目,但直接使用返回条目的driveId和id访问具体内容(如/drives/{driveId}/items/{id}/children)时返回404,而浏览器可正常访问。已配置Files.ReadWrite.All权限。

1. 使用remoteItem属性构造正确访问路径

sharedWithMe返回的条目是共享关系记录,而非实际文件/文件夹资源,其id是本地共享记录ID,无法直接用于访问外部租户资源。需提取条目中的remoteItem属性获取实际资源标识:

  • 从返回JSON中取remoteItem.id(实际文件/文件夹ID)和remoteItem.parentReference.driveId(外部租户Drive ID)
  • 构造请求:
    GET https://graph.microsoft.com/v1.0/drives/{remoteItem-driveId}/items/{remoteItem-id}/children
    

2. 使用/shares端点访问共享资源

这是访问外部共享内容的标准方式,无需依赖外部Drive ID:

  • 从sharedWithMe返回条目中提取shareId字段
  • 构造请求:
    GET https://graph.microsoft.com/v1.0/shares/{shareId}/driveItem/children
    
  • 下载文件可直接使用remoteItem中的@microsoft.graph.downloadUrl字段,无需额外API调用

3. 确认权限类型与调用方式

  • 若使用应用权限(客户端凭证流):
    • 不能用/me/drive端点,需替换为服务账号用户ID:
      GET https://graph.microsoft.com/v1.0/users/{service-account-user-id}/drive/sharedWithMe?allowexternal=true
      
    • 确保Files.ReadWrite.All应用权限已获得管理员同意(检查Azure AD应用注册的“权限”页面,确认权限状态为“已授予”)
  • 若使用委派权限(授权码流):
    • 授权时需明确请求Files.ReadWrite.All权限,且JWT Token的scp声明中包含该权限

4. 验证外部共享权限配置

  • 确认外部租户用户Ricky共享文件夹时,已将服务账号(service@email.com)添加为明确共享对象,而非仅“组织外部用户”或“任何人”(模糊权限可能导致API访问受限)
  • 检查共享权限级别:需至少授予“读取”权限,确保API有足够访问权限

5. 检查JWT Token有效权限

  • 解码JWT Token,确认:
    • 应用权限流:roles声明包含Files.ReadWrite.All
    • 委派权限流:scp声明包含Files.ReadWrite.All
  • 若权限未出现在Token中,需重新获取Token,或确认权限已正确授予并同意

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:43:12