Аутентификация Microsoft Sharepoint с использованием Python - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь загрузить документы в SharePoint онлайн.

Целевой URL: https://companyURL.sharepoint.com/sites/A/B/Info_documents/C

Моя цель - выполнить поиск в папке C, и если подпапка X присутствует в папке C, мне нужно загрузить файл.Для этого я сгенерировал client_id и client_secret, перейдя к http://{sharepointsite}/_layouts/15/AppRegNew.aspx. В разрешениях XML я дал следующий код:

Я использую https://github.com/vgrem/Office365-REST-Python-Client для этогореализация.При попытке использовать следующий фрагмент кода, чтобы увидеть, если у меня есть доступ к sharepoint с помощью client_id и client_secret, я вижу разные ошибки:

    import json

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.runtime.client_request import ClientRequest
from office365.runtime.utilities.request_options import RequestOptions
from office365.sharepoint.client_context import ClientContext


app_settings = {
    'url': 'https://companyURL.sharepoint.com/sites/A/B/Info_documents/C',
    'client_id': 'xxxxxxxx',
    'client_secret': 'xxxxxx',
}

context_auth = AuthenticationContext(url=app_settings['url'])
context_auth.acquire_token_for_app(client_id=app_settings['client_id'], client_secret=app_settings['client_secret'])

ctx = ClientContext(app_settings['url'], context_auth)
web = ctx.web
ctx.load(web)
ctx.execute_query()
print("Web site title: {0}".format(web.properties['Title']))

Ошибка: ClientRequestException: ('-2147024891, System.UnauthorizedAccessException ',' Доступ запрещен. У вас нет разрешения на выполнение этого действия или доступ к этому ресурсу. ',' 403 Ошибка клиента: запрещено для URL: https://companyURL.sharepoint.com/sites/A/B/Info_documents/C_api/Web')

Но я дал разрешения, не уверен, чтоЯ делаю неправильно или выбрал неправильный модуль.

Пожалуйста, помогите.

Ниже приведен код XML, который я дал при генерации client_ID и client_secret:

<AppPermissionRequests AllowAppOnlyPolicy="true">
       <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="Read"/>
       <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="Write"/>
     </AppPermissionRequests>

1 Ответ

0 голосов
/ 27 сентября 2019

Учитывая описание

Моя цель - поиск в папке C, и если подпапка X присутствует в папке C, мне нужно загрузить файл.

иследующий формат ссылки:

https://companyURL.sharepoint.com/sites/A/B/Info_documents/C

структура вашей папки может быть представлена ​​следующим образом:

https://companyURL.sharepoint.com/sites/A/B/  <-this is the actual site url
          |
   Info_documents <-library
              |
          C <-folder

Поскольку класс AuthenticationContext принимает первый параметр, равный url сайта , app_settings необходимо обновить следующим образом:

app_settings = {
    'url': 'https://companyURL.sharepoint.com/sites/A/B/',  //need to refer to site url
    'client_id': '--client id goes here--',
    'client_secret': '--client secret goes here--',
}

Теперь наступает черед Принципал приложения , так как запрошенные разрешения применимы для сети (scope: http://sharepoint/content/sitecollection/web), второй шаг ( предоставление разрешений ) необходимо выполнить для указанной сети:

https://companyURL.sharepoint.com/sites/A/B/_layouts/15/appinv.aspx

Пример

Здесьпример, который демонстрирует, как проверить, существует ли подпапка в родительской папке:

context_auth = AuthenticationContext(url=app_settings['url'])
context_auth.acquire_token_for_app(client_id=app_settings['client_id'], 
client_secret=app_settings['client_secret'])
ctx = ClientContext(app_settings['url'], context_auth)

folder_url = "Info_documents/C"  #folder url where to find 
folder_name = "X"  #folder name to find
result = ctx.web.get_folder_by_server_relative_url(folder_url).folders.filter("Name eq '{0}'".format(folder_name))
ctx.load(result)
ctx.execute_query()
if len(result) > 0:
    print("Folder has been found: {0}".format(result[0].properties["Name"]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...