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

求助:无法通过Microsoft Graph API访问公开共享的SharePoint文件

无需登录读取公开共享Excel文件的解决办法

错误原因

你碰到的InvalidAuthenticationToken错误,本质是当前身份验证方式不匹配跨租户公开文件场景。应用权限(客户端凭据流)仅能访问本租户内资源,用户令牌(授权码流)需要用户登录文件所属租户,这两种方式都无法直接访问其他租户或个人OneDrive的公开共享文件。

可行方案

1. 直接匿名下载(无需Graph API)

对于设置为「任何人可查看/编辑」的文件,直接通过共享URL构造下载链接即可,完全不需要令牌:

  • 提取公开共享URL(示例:https://1drv.ms/x/s!AbcDefGhiJklmNoPqRsTuVwXyZ)
  • 将完整URL做Base64编码,前缀加上u!,得到类似u!aHR0cHM6Ly8xZHJ2Lm1zL3gvcyFBYmNEZWZHaWJKbGxtTm9QcVJzVH VWd1h5Wg==的字符串
  • 构造下载链接:https://api.onedrive.com/v1.0/shares/{上述编码字符串}/root/content
  • 发起GET请求,直接获取Excel文件的二进制内容

2. Graph API匿名访问

如果必须使用Graph API,可通过共享资源的匿名端点访问:

  • 对公开共享URL做Base64编码并加u!前缀(同上述步骤)
  • 调用GET https://graph.microsoft.com/v1.0/shares/{编码字符串}/root获取文件元数据,或追加/content获取文件内容
  • 此请求不需要携带Authorization头,完全匿名

3. 客户端凭据流(仅本租户场景)

如果文件是你自己租户内的SharePoint站点公开共享的,可使用应用权限:

  • 在Azure AD注册应用,添加Files.Read.All或Sites.Read.All应用权限并获取管理员同意
  • 通过客户端凭据流获取令牌:
    POST https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    client_id={你的应用ID}&client_secret={你的应用密钥}&grant_type=client_credentials&scope=https://graph.microsoft.com/.default
    
  • 用该令牌调用Graph API访问文件,但此方法仅适用于本租户内的文件,跨租户无效

核心提示

公开共享的「任何人可访问」文件,本身就不需要身份验证,没必要走需要令牌的流程。之前的错误就是因为用了只能访问本租户资源的身份验证方式,才导致令牌无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:30:06