问题-使用python从共享点获取excel文件

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

当我尝试使用以下 python 代码从共享点获取文件时出现错误。以下是错误消息: 从 XML 响应检索令牌时发生错误:AADSTS53003:访问已被条件访问策略阻止。访问策略不允许发行代币。谁能帮我怎么做?这是我的代码:

import os
import shutil
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
sharepoint_url = "Sharepoint_site_url"
site_url = "site url"
username = "My_username"
password = "Password"
# File path components
library_name = "Shared Documents"
folder_name = "ABCD"
# Construct the full file path
file_path = f"https://xyz.sharepoint.com/sites/site_name/{library_name}/{folder_name}/"
# Encode the file path
encoded_file_path = file_path.replace(" ", "%20")  # Replace spaces with %20
print(encoded_file_path)
# Authenticate with SharePoint
ctx_auth = AuthenticationContext(sharepoint_url)
if ctx_auth.acquire_token_for_user(username, password):
    # Connect to SharePoint site
    ctx = ClientContext(site_url, ctx_auth)
    web = ctx.web
    ctx.load(web)
 
    # Get all files in the SharePoint folder
    files = ctx.web.get_folder_by_server_relative_path(file_path).files
    ctx.load(files)
    ctx.execute_query()
    # Create a folder on the C drive
    c_drive_folder1 = "C:/ENTERP/Raw"
    c_drive_folder2 = "C:/ENTERPR/Processed"
    os.makedirs(c_drive_folder1, exist_ok=True)
    os.makedirs(c_drive_folder2, exist_ok=True)
    # Download and save each file to the C drive folder
for file in files:
        print(1)
        file_name = file.properties["Name"]
        file_url = f"{site_url}/{library_name}/{folder_name}/{file_name}"
        file_content = ctx.web.get_file_by_server_relative_path(file_url).read().execute_query()
        # Save the file to the C drive folder
        file_path_on_c_drive = os.path.join(c_drive_folder1, file_name)
        with open(file_path_on_c_drive, "wb") as local_file:
            local_file.write(file_content)
        print(f"Downloaded and saved: {file_name} to {file_path_on_c_drive}")
        print("Download process completed.")
else:
        print("Failed to authenticate with SharePoint.")

任何替代解决方案建议也将不胜感激。

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

AAD 会阻止令牌获取,因为不推荐使用用户名和密码身份验证,而支持基于应用程序的身份验证。您需要在 Azure 中创建一个“仅应用程序”应用程序注册,并授予 SPO API 访问权限(SharePoint > Sites.Selected),然后该应用程序需要对该站点进行“读取”访问权限 (ref)。然后您需要像this那样进行身份验证。 或者,如果您完全控制您的环境,则可以授予应用程序注册访问所有站点的权限(SharePoint > Sites.FullControl.All)。

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