Office365-rest-python-client: IndexError: список индекса вне допустимого диапазона

Созданный на 8 дек. 2020  ·  14Комментарии  ·  Источник: vgrem/Office365-REST-Python-Client

Уважаемый господин,
Не могли бы вы помочь мне узнать, почему я больше не подключаюсь к sharepoint?

С версией 2.2.2 все работало нормально.
Затем возникла проблема № 272 (произошла ошибка при получении токена из ответа XML: AADSTS500069), поэтому я обновился до 2.3.0.1.
Теперь следующий код тоже не работает:
def copy_sharepoint (self, filename = ""):
ctx = ClientContext (self.SITE_SHAREPOINT) .with_credentials (UserCredential (self.WIN_USER, self.WIN_PASSWORD))
localpath = os.path.join (self.CHEMIN_XLSX, self.NOM_TIR + '/',self.FICHIER_BI)
self.print_debug ("", локальный путь)
self.print_debug ("", self.WIN_PASSWORD)
с open (localpath, 'rb') как content_file:
file_content = content_file.read ()
file = ctx.web.get_folder_by_server_relative_url (self.CHEMIN_SHAREPOINT) .upload_file (self.FICHIER_BI, file_content) .execute_query ()

Отслеживание (последний вызов последний):
Файл "/appli/sopra/tools/tir_bench.py", строка 1327, в
tir_bench.copy_sharepoint ()
Файл "/appli/sopra/tools/tir_bench.py", строка 1278, в copy_sharepoint
file = ctx.web.get_folder_by_server_relative_url (self.CHEMIN_SHAREPOINT) .upload_file (self.FICHIER_BI, file_content) .execute_query ()
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_object.py", строка 30, в execute_query
self.context.execute_query ()
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_runtime_context.py", строка 138, в execute_query
self.pending_request (). execute_query ()
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_request.py", строка 73, в execute_query
self.beforeExecute.notify (запрос)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/types/EventHandler.py", строка 18, в уведомлении
слушатель ( аргументы, * kwargs)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", строка 162, в _build_modification_query
self.ensure_form_digest (запрос)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", строка 123, в файле sure_form_digest.
self.request_form_digest ()
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", строка 130, в request_form_digest
response = self.execute_request_direct (запрос)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_runtime_context.py", строка 134, в execute_request_direct
return self.pending_request (). execute_request_direct (запрос)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/odata/odata_request.py", строка 34, в execute_request_direct
вернуть super (ODataRequest, self) .execute_request_direct (запрос)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_request.py", строка 86, в execute_request_direct
self.context.authenticate_request (параметры_запроса)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", строка 151, в Authenticate_request
self._auth_context.authenticate_request (запрос)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/authentication_context.py", строка 84, в Authenticate_request
self._provider.authenticate_request (запрос)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", строка 73, в Authenticate_request
self.ensure_authentication_cookie ()

Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", строка 80, в файле sure_authentication_cookie.
self._cached_auth_cookies = self.get_authentication_cookie ()
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", строка 93, в get_authentication_cookie
токен = self._acquire_service_token_from_adfs (user_realm.STSAuthUrl)
Файл "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", строка 136, в _acquire_service_token_from_adfs
assertion_node = dom.getElementsByTagNameNS ("urn: oasis: names: tc: SAML: 1.0: assertion", 'Assertion') [0] .toxml ()
IndexError: список индекса вне допустимого диапазона

Не могли бы вы помочь мне с этой проблемой?

Заранее спасибо,
Гийом

Все 14 Комментарий

Привет,
Кроме того, вот значение response.content.decode ())

http://www.w3.org/2005/08/addressing/soap/faultcfb81633-ff49-4e50-9544-7e39214d7122
<value i="14">s:Sender</value><subcode i="15"><value i="16">a:InvalidSecurity</value></subcode>Произошла ошибка при проверке безопасности сообщения.

Привет!

Спасибо за подробный журнал, на данный момент у меня нет возможности проверить его на соответствие SharePoint / ADFS env.

@wreiner , может быть, вы могли бы подтвердить, работает ли _federated authentication_ на вашей стороне в последней версии должным образом?

всем привет

У меня похожие проблемы, следующая строка дает мне ответ 400 или 500.

https://github.com/vgrem/Office365-REST-Python-Client/blob/020c8c8176ce2eea3accbe95e2e4372af57ef6c8/office365/runtime/auth/providers/saml_token_provider.py#L133

В случае, если я получу ответ 400, тело будет пустым, что приведет к исключению xml.parsers.expat.ExpatError: no element found: line 1, column 0 . ответ 500 дает то же исключение, что и @ guillaume-colas.

Я еще не получил пакет для работы, так что это вполне может быть сервер sharepoint, но я попробую понизить версию пакета, чтобы быть уверенным. Как я могу убедиться, что аутентификация sharepoint настроена правильно?

Спасибо заранее!

Привет,

Я не сижу на своем компьютере, чтобы полностью анализировать, но, как я вижу, когда я устанавливаю последнюю версию с помощью pip, функция _acquire_service_token_from_adfs_ отсутствует в _runtime / auth / sizes / saml_token_provider.py_.

В моем запросе на перенос эта функция не удалена, поэтому я не уверен, почему она отсутствует. Также мое исправление для формата datetime отсутствует в файле. Может при слиянии произошла ошибка?

@wreiner спасибо, что вернулся, относительно

Acquire_service_token_from_adfs отсутствует

он был преобразован с публичного на частный метод .

мое исправление для формата datetime отсутствует в файле

формат должен быть в том виде, в котором он был зафиксирован изначально, но он был подвергнут рефакторингу с точки зрения перемещения объявления в sts_profile.py

self.created = now.astimezone(timezone.utc).isoformat('T')[:-9] + 'Z' self.expires = (now + timedelta(minutes=10)).astimezone(timezone.utc).isoformat('T')[:-9] + 'Z'

Но если после слияния чего-то не хватает, винить следует меня.

всем привет

У меня похожие проблемы, следующая строка дает мне ответ 400 или 500.

https://github.com/vgrem/Office365-REST-Python-Client/blob/020c8c8176ce2eea3accbe95e2e4372af57ef6c8/office365/runtime/auth/providers/saml_token_provider.py#L133

В случае, если я получу ответ 400, тело будет пустым, что приведет к исключению xml.parsers.expat.ExpatError: no element found: line 1, column 0 . ответ 500 дает то же исключение, что и @ guillaume-colas.

Я еще не получил пакет для работы, так что это вполне может быть сервер sharepoint, но я попробую понизить версию пакета, чтобы быть уверенным. Как я могу убедиться, что аутентификация sharepoint настроена правильно?

Спасибо заранее!

Привет Марк,

спасибо за подтверждение, это действительно выглядит в последней версии федеративной аутентификации (SharePoint / ADFS) несколько сломанной
Не могли бы вы попробовать _предыдущую_ версию ( 2.2.2 )?

Я не прошел полный анализ, но для моих изменений я могу сказать, что они возвращают токен безопасности и файл cookie правильно, но банка cookie не содержит поля FedAuth, которое ищется в is_valid_auth_cookies, которое теперь используется в _get_authentication_cookie.

https://github.com/vgrem/Office365-REST-Python-Client/blob/93325ea33675b86aafc2e6e0fa381c184ce479e7/office365/runtime/auth/providers/saml_token_provider.py#L32

Для федеративной аутентификации я вижу только SPOIDCRL в банке.

В настоящее время я все еще не могу правильно использовать полученные данные аутентификации, я все еще изучаю, но не могу сказать, сколько времени мне понадобится.

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

Спасибо за быстрые ответы :-)

@vgrem он получает аналогичную ошибку в версии 2.2.2, поэтому, похоже, это сервер sharepoint.

Было бы неплохо превратить исключение в более читаемое.

Я на шаг впереди. Оказывается, мне нужно было сбросить пароль. Теперь я получаю ту же ошибку, что и @wreiner. is_valid_auth_cookies возвращает, что файл cookie недействителен, поскольку словарь содержит только ключ SPOIDCRL и не содержит ключа FedAuth. Если я просто прокомментирую эту проверку, действителен ли файл cookie или нет. Я могу скачивать файлы с sharepoint. Таким образом, аутентификация, похоже, работает нормально.

Может еще раз попробую версию 2.2.2.

У меня такая же проблема. is_valid_auth_cookies return False из-за отсутствия ключа FedAuth в файлах cookie dict. Если я прокомментирую код возврата и упрощу return True, аутентификация будет работать нормально.

def is_valid_auth_cookies(values):
    return True
    # return any(values) and values.get('FedAuth', None) is not None

Привет, @ hungnguyen95 , спасибо за подтверждение!

Оказывается, is_valid_auth_cookies нужно отрегулировать.

Привет,
Будет ли моя проблема решена путем изменения is_valid_auth_cookies?

Я совсем потерялся здесь, извините. Я думал, что моя проблема в _acquire_service_token_from_adfs.
Вы знаете, почему я получаю ответ «Недопустимая безопасность» и, надеюсь, способ обхода аутентификации?

Заранее спасибо за помощь.
Гийом

@ guillaume-colas кажется, что ваша проблема, вероятно, связана с сервером, который не разрешает вам доступ. Вы уверены, что пароль правильный, и пробовали ли вы его сбросить? Сброс моего пароля решил эту проблему. После чего я столкнулся с проблемой is_valid_auth_cookies .

@ mark-boer Да, я проверил свой пароль, и он правильный. Возможно ли, что аутентификация с помощью 2FA (смс-код) блокирует аутентификацию?

Можно ли использовать ClientCredentials для загрузки файлов в sharepoint?

Заранее спасибо за помощь

Была ли эта страница полезной?
0 / 5 - 0 рейтинги