Как получить доступ к сайту точки доступа в качестве API с помощью Python

#python #api #sharepoint

Вопрос:

Я пытаюсь получить доступ к сайту точки доступа в качестве api, используя python для загрузки файлов.

До сих пор я пробовал модули «shareplum» , «office365» и «sharepy» на python.

Каждый раз, когда я получаю ошибку аутентификации из-за неверного имени пользователя или пароля.

Но я могу войти на этот сайт точки общего доступа из веб-браузера, используя то же имя пользователя и пароль.

Какому подходу я должен следовать или какой тип аутентификации я должен использовать ?

С уважением, Сантану

общий доступ:

 from shareplum import Site, Office365
from shareplum.site import Version
import json
import os

ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
config_path = '\'.join([ROOT_DIR, 'config_1.json'])

with open(config_path) as config_file:
    config = json.load(config_file)
    config = config['share_point']

USERNAME = config['user']
PASSWORD = config['password']
SHAREPOINT_URL = config['url']
SHAREPOINT_SITE = config['site']
SHAREPOINT_DOC = config['doc_library']


def auth():
    authcookie = Office365(SHAREPOINT_URL, username=USERNAME, password=PASSWORD).GetCookies()
    print(f"authcookie: {authcookie}")
    site = Site(SHAREPOINT_SITE, version=Version.v365, authcookie=authcookie)
    print(f"site: {site}")
    return site


def connect_folder(folder_name):
    auth_site = auth()
    print(f"auth_site: {auth_site}")
    sharepoint_dir = '/'.join([SHAREPOINT_DOC, folder_name])
    print(f"sharepoint_dir: {sharepoint_dir}")
    folder = auth_site.Folder(sharepoint_dir)
    print(f"folder: {folder}")
    return folder


def download_file(file_name, folder_name):
    _folder = connect_folder(folder_name)
    print(f"_folder: {_folder}")
    return _folder.get_file(file_name)


def run():
    # set file name
    file_name = 'Hardy_ServiceReporting_Aug2021.csv'

    # set the folder name
    folder_name = 'Problem Management'

    # get file
    file = download_file(file_name, folder_name)
    print(file)


if __name__ == "__main__":
    run()
 

Ошибка: Error from Office 365:', 'AADSTS50126: Error validating credentials due to invalid username or password.'

офис365:

 from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File
import json
import os


ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
config_path = '\'.join([ROOT_DIR, 'config_1.json'])

with open(config_path) as config_file:
    config = json.load(config_file)
    config = config['share_point']

USERNAME = config['user']
PASSWORD = config['password']
SHAREPOINT_URL = config['url']
SHAREPOINT_SITE = config['site']
SHAREPOINT_DOC = config['doc_library']
FOLDER = "Problem Management"

url = SHAREPOINT_SITE   "/_api/web/GetFolderByServerRelativeUrl('{}/{}')/Files".format(SHAREPOINT_DOC, FOLDER)
print(f"url: {url}")
ctx_auth = AuthenticationContext(url)
print(f"ctx_auth: {ctx_auth}")
ctx_auth.acquire_token_for_user(USERNAME, PASSWORD)
ctx = ClientContext(url, ctx_auth)
print(f"ctx: {ctx}")
 

Ошибка: 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.

Комментарии:

1. Включен ли MFA в вашем арендаторе?

2. Я новичок в этом вопросе, поэтому, пожалуйста, уточните. что вы подразумеваете под МИДом ? как мы можем это проверить ?

3. Это Многофакторная Аутентификация. При входе на сайт вы можете использовать телефон для аутентификации вместо имени пользователя и пароля.