错误 403:在 Python 中使用应用程序凭据访问 Sharepoint

问题描述 投票:0回答:1

我正在尝试使用 Python 访问存储在 SharePoint 中的文件。我已在 Azure Ad 中注册了该应用程序并拥有 client_id 和 client_secret。我已经授予了读写权限,但仍然收到 403 错误。

我不太确定我错过了什么。以下是脚本:

from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.client_credential import ClientCredential

site_url = ''
app_principal = {
    'client_id': '',
    'client_secret': ''
}

credentials = ClientCredential(app_principal['client_id'], app_principal['client_secret'])
ctx = ClientContext(site_url).with_credentials(credentials)

web = ctx.web
ctx.load(web)
ctx.execute_query()

我也尝试过修改权限,但没有成功。

python authentication sharepoint azure-active-directory
1个回答
0
投票

如果应用程序没有执行操作所需的权限,通常会发生此错误。

要使用仅应用程序主体访问 SharePoint,请运行以下 URL 并使用全局管理员凭据登录以添加 Azure AD 应用程序的权限:

https://yourtenant-admin.sharepoint.com/_layouts/15/appinv.aspx

您可以通过输入

AppId
找到您的应用程序,并使用下面的 xml 添加权限:

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
</AppPermissionRequests>

enter image description here

在下一步中,单击

Trust it
选项向仅应用程序主体授予权限:

enter image description here

我有一个名为

doclib
的 SharePoint 文档库,其中有几个文件,如下所示:

![enter image description here](https://i.imgur.com/Bl9I8AX.png)

当我运行下面的 Python 代码来列出上面的 SharePoint 文档库中存在的文件时,我成功得到了如下响应:

from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.client_credential import ClientCredential

# SharePoint site and credentials
site_url = 'https://xxxxxx.sharepoint.com/sites/sridemosite'
app_principal = {
    'client_id': 'appId',
    'client_secret': 'secret'
}

credentials = ClientCredential(app_principal['client_id'], app_principal['client_secret'])
ctx = ClientContext(site_url).with_credentials(credentials)

# Load web and print its title
web = ctx.web
ctx.load(web)
ctx.execute_query()
print("Web title: {0}".format(web.properties['Title']))

# Function to list all files in a document library
def list_files(folder_url):
    folder = ctx.web.get_folder_by_server_relative_url(folder_url)
    files = folder.files
    ctx.load(files)
    ctx.execute_query()

    for file in files:
        print(f"File name: {file.properties['Name']}")

# Specify the document library to list files from
document_library_url = "/sites/sridemosite/doclib"
list_files(document_library_url)

回复:

enter image description here

参考:

python - Sharepoint Rest API office365 库 403 客户端错误 - 代码日志

© www.soinside.com 2019 - 2024. All rights reserved.