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

使用Office365-REST-Python-Client上传文件至SharePoint遇403,如何配置权限?

SharePoint文件上传权限配置解决方案

一、修正SharePoint传统应用注册(appregnew/appinv)的权限配置

你已通过_layouts/15/appregnew.aspx创建应用、_layouts/15/appinv.aspx信任应用,但权限配置可能存在以下问题:

  1. 确保权限XML包含App-Only策略及正确权限
    在appinv.aspx的权限请求XML输入框中,必须开启应用独立权限并授予读写权限,示例XML:

    <AppPermissionRequests AllowAppOnlyPolicy="true">
      <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="Write" />
    </AppPermissionRequests>
    
    • Scope:按需选择层级,网站集级别用http://sharepoint/content/sitecollection,网站级别用http://sharepoint/content/sitecollection/web
    • Right:至少设为Write,需全权限可设为FullControl
  2. 验证权限授予状态
    进入SharePoint站点的网站设置->应用程序权限,确认应用已被列出且权限匹配配置。若未显示,需重新执行appinv.aspx的信任操作。

  3. 核对CLIENT_ID与CLIENT_SECRET
    确保从appregnew.aspx复制的客户端ID和密钥完整无错,密钥为一次性生成,丢失需重新创建。

二、改用Azure AD应用注册(推荐,微软主流方案)

若传统方式无效,建议使用Azure AD应用注册,步骤如下:

  1. 注册Azure AD应用

    • 登录Azure门户,进入Azure Active Directory->应用注册,点击新注册
    • 填写名称,选择账户类型(推荐“任何组织目录中的账户”),重定向URI留空,完成注册
    • 记录应用程序(客户端)ID(即代码中的CLIENT_ID),在证书和密码中新建客户端密码,记录密码(即CLIENT_SECRET)
  2. 配置API权限

    • 在应用注册的API权限页面,点击添加权限->选择SharePoint->选择应用权限
    • 添加Sites.ReadWrite.All权限,点击授予管理员同意(需全局管理员操作,否则权限不生效)
  3. 代码无需大幅调整
    原认证逻辑可直接使用,确保SHAREPOINT_SITE_URL为站点完整URL(如https://your-domain.sharepoint.com/sites/your-site)

三、代码本身的小修正

你的上传代码存在参数错误:target_folder.files.upload的第一个参数应为SharePoint上的文件名,而非本地文件路径。修正后:

def upload_document_to_sharepoint(local_file_path, sharepoint_folder_path):
    import os
    from office365.sharepoint.client_context import ClientContext
    from office365.runtime.auth.client_credential import ClientCredential

    # 替换为你的实际参数
    CLIENT_ID = "your-client-id"
    CLIENT_SECRET = "your-client-secret"
    SHAREPOINT_SITE_URL = "https://your-domain.sharepoint.com/sites/your-site"

    # Authenticate with SharePoint
    credentials = ClientCredential(CLIENT_ID, CLIENT_SECRET)
    ctx = ClientContext(SHAREPOINT_SITE_URL).with_credentials(credentials)

    # Get the target folder
    target_folder = ctx.web.get_folder_by_server_relative_url(sharepoint_folder_path)

    file_name = os.path.basename(local_file_path)

    # Open the local file in binary read mode
    with open(local_file_path, 'rb') as file_content:
        # 修正第一个参数为file_name
        uploaded_file = target_folder.files.upload(file_name, file_content.read()).execute_query()
        print(f"File '{file_name}' uploaded successfully to: {uploaded_file.serverRelativeUrl}")

四、排查验证步骤

  1. 用Postman测试权限:获取应用令牌后,调用GET https://<site-url>/_api/web,返回200则权限生效,403则需重新检查配置
  2. 确认SharePoint站点未启用IP限制或其他安全策略阻止应用访问
  3. 若使用Azure AD应用,检查租户是否允许应用访问SharePoint资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:24:52