Unable to upload the file in SharePoint, since yesterday the code is working fine used stored file in Sharepoint now am getting the below error:
Exception: (‘Error authenticating against Office 365. Error from Office 365:’, ‘AADSTS50055: The password is expired.’)
The same thing happened for the other two accounts even.
The function uploadMeta_file(filepath_meta)
to call Sharepoint
File “c:UsersDesktopworksamplecookiepopup-kana-api.venvlibsite-packagesshareplumoffice365.py”, line 80, in get_security_token raise Exception(‘Error authenticating against Office 365. Error from Office 365:’, message[0].text) Exception: (‘Error authenticating against Office 365. Error from Office 365:’, ‘AADSTS50055: The password is expired.’)
import requests
import jsonpath
import os, requests, uuid, json
import pandas as pd
from shareplum import Office365
import xlsxwriter
from shareplum import Site
from datetime import datetime
import logging
def kana_api():
writer.save()
filepath_meta ="kana1_input.xlsx"
uploadMeta_file(filepath_meta)
#metadata file
def uploadMeta_file(filepath_meta):
# working with crentials
username = "myid
password = "mypassword"
site_name = "AFFinance"
base_path = "validpath"
doc_library ="validlib"
file_name = filepath_meta
# Obtain auth cookie
authcookie = Office365(base_path, username=username, password=password).GetCookies()
session = requests.Session()
session.cookies = authcookie
session.headers.update({'user-agent': 'python_bite/v1'})
session.headers.update({'accept': 'application/json;odata=verbose'})
session.headers.update({'X-RequestDigest': "FormDigestValue"})
response = session.post( url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + "')/Files/add(url='a.txt',overwrite=true)",
data="")
logging.info(response)
session.headers.update({'X-RequestDigest': response.headers['X-RequestDigest']})
# perform the actual upload
with open( file_name, 'rb') as file_input:
try:
response = session.post(
url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + "')/Files/add(url='"
+ file_name + "',overwrite=true)",
data=file_input)
logging.info("Meta File uploaded")
except Exception as err:
logging.info("Some error occurred....")
if __name__== '__main__':
kana_api()
Advertisement
Answer
Like you mentioned there is MFA enabled for your account. Looks like you have not handled the same in your application.
There 2 ways to go about this.
Provide Interactive logon UI for handling the MFA.
Create a service account which has the MFA disabled. Thereby using this account to access the Sharepoint Online, you will not encounter the above issue.
Using App Only Authentication
What are Sharepoint app only ?
App only authentication – will not require user credentials but you can get the data by authenticating the App. And Also, app authentication will indirectly bypass MFA (App only authentication are not subjected to MFA).
More information : https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs
I was reading through the Shareplum Tutorials – Unfortunately, but could not get the way to do the App Only Authentication. But you could double check at your end.
If your goal is to use python, you can also use the below library :
https://pypi.org/project/Office365-REST-Python-Client/#Working-with-SharePoint-API
To perform the app only authentication :
client_credentials = ClientCredential('{client_id}'),'{client_secret}')
ctx = ClientContext('{url}').with_credentials(client_credentials)
But yes, you will have reform your code to perform the required action to make use of the above library.