I am facing an error while running this script while trying to download files from sharepoint via python. The error is coming: An error occurred while retrieving token from XML response: AADSTS53003: Access has been blocked by Conditional Access policies. The access policy does not allow token issuance. Could anyone help me how to do that? Here is my code:
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.")```
I tried others codes too, but everytime i am getting the same error.
The error message you're encountering suggests that there's a Conditional Access policy in place that's blocking token issuance, hence preventing access to SharePoint resources. This typically happens when the security policies configured for your Azure AD tenant restrict access based on certain conditions such as location, device compliance, or other factors.
To resolve this issue, you may need to either adjust the Conditional Access policies in your Azure AD tenant to allow token issuance for the scenario you're working with, or you might need to exempt the application or service principal associated with your Python script from these policies.