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

使用office365-rest-python-api从SharePoint下载文件遇认证问题求助

解决office365-rest-python-api连接SharePoint的两种认证错误

一、UserCredential认证报错:ValueError: Cannot get binary security token from https://login.microsoftonline.com/extSTS.srf

该错误源于旧式认证机制不兼容或被禁用,排查方向:

  • 租户是否禁用旧式认证:SharePoint Online默认禁用依赖ws-trust协议的Legacy Auth,若租户全局开启禁用策略,UserCredential方式直接失效,建议改用OAuth2体系的认证方式(如ClientCredential、证书认证)。
  • 用户账号是否启用MFA:若账号开启多重身份验证,仅通过用户名+密码的UserCredential方式无法完成认证,需使用支持MFA的流程(如设备代码流)。

二、ClientCredential认证报错:Forbidden 403 Error

403错误核心是应用权限不足或配置未生效,补充以下配置步骤:

  • 授予管理员同意:在Azure AD应用的API权限页面,添加SharePoint的应用权限(注意是应用权限,而非委托权限)后,必须点击「授予管理员同意」按钮,否则权限无法实际生效。
  • 确认权限范围:针对文档库读取需求,需添加Sites.Read.All或更具体的Sites.ReadWrite.All应用权限,避免使用仅适用于用户上下文的委托权限。
  • 授予站点级权限:若仅需访问特定站点,除Azure AD全局权限外,还需在目标SharePoint站点中给应用授予权限,可通过PowerShell执行:
    Connect-PnPOnline -Url https://yourtenant.sharepoint.com/sites/yoursite -Interactive
    Set-PnPAppPermission -AppId <你的ClientID> -PermissionLevel "Read" -Scope Site
    
  • 验证凭据有效性:检查Client Secret是否未过期、复制时无多余空格;确认Client ID与Azure AD应用ID完全匹配。
  • 核对文档库路径:代码中"Shared Documents/Documents"需确保是目标站点下的正确服务器相对路径,可通过SharePoint站点的文档库属性确认。

代码优化提示

原代码中get_folder_by_server_relative_path后已执行get().execute_query(),后续重复ctx.load(web)和execute_query()属于冗余操作,可简化为:

client_credentials = ClientCredential(f'{client_id}',f'{client_secret}')
ctx = ClientContext(url).with_credentials(client_credentials)

# 获取文件夹并加载关联的文件、子文件夹属性
folder = ctx.web.get_folder_by_server_relative_path("Shared Documents/Documents").expand(["Files", "Folders"]).get().execute_query()
# 单独获取站点标题
web = ctx.web.get().execute_query()
print("Web title: {0}".format(web.properties['Title']))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:30:24