我正在尝试使用 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()
我也尝试过修改权限,但没有成功。
如果应用程序没有执行操作所需的权限,通常会发生此错误。
要使用仅应用程序主体访问 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>
在下一步中,单击
Trust it
选项向仅应用程序主体授予权限:
我有一个名为
doclib
的 SharePoint 文档库,其中有几个文件,如下所示:
当我运行下面的 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)
回复:
参考: