Office365-rest-python-client: Произошла ошибка при получении файлов cookie аутентификации с https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc

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

Привет,

Контекст проблемы

Я работаю с версией 2.1.7.post1 (согласно pip freeze), для входа в sharepoint не требуется MFA.
В настоящее время я пытаюсь получить файл Excel из sharepoint компании со следующим сценарием (созданным из README проекта):

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

url = 'https://mycompany.sharepoint.com/sites/documentssite/'

ctx_auth = AuthenticationContext(url)
if ctx_auth.acquire_token_for_user(username, password):
    ctx = ClientContext(url, ctx_auth)
    web = ctx.web
    ctx.load(web)
    ctx.execute_query()
    print("Web title: {0}".format(web.properties['Title']))

Запуск этого сценария дает следующий результат:
An error occurred while retrieving auth cookies from https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc

Некоторые подробности о проблеме

Я заметил, запустив этот скрипт в режиме отладки, что проблема исходит от метода acquire_authentication_cookie класса SamlTokenProvider
Фактически, метод вызывается с помощью federated=True поэтому HTTP-запрос выполняется по адресу https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc с помощью метода HEAD. Ниже вы можете найти часть, в которой он не работает:

     def acquire_authentication_cookie(self, security_token, federated=False):
        ...
        else:
            self._auth_cookies['SPOIDCRL'] = None
            session.head(self.__sts_profile.signInPageUrl,
                         headers={
                             'User-Agent': 'Office365 Python Client',
                             'X-IDCRL_ACCEPTED': 't',
                             'Authorization': 'BPOSIDCRL {0}'.format(security_token),
                             'Content-Type': 'application/x-www-form-urlencoded'
                         })
        logger.debug_secrets("session.cookies: %s", session.cookies)
        cookies = requests.utils.dict_from_cookiejar(session.cookies)
        logger.debug_secrets("cookies: %s", cookies)
        if not cookies:
            self.error = "An error occurred while retrieving auth cookies from {0}".format(self.__sts_profile.signInPageUrl)
            logger.error(self.error)
            return False

Ответ не содержит файлов cookie, поэтому я получаю сообщение об ошибке.

Кстати, у меня возникла такая же проблема, когда я установил url на https://mycompany.sharepoint.com .

Сообщите мне, если я недостаточно подробно рассказал о проблеме.
Заранее спасибо !

question

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

Немного новостей о проблеме:

Когда я делаю запрос HEAD на https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc с помощью curl, меня перенаправляют на https://mycompany.sharepoint.com/_vti_bin/idcrl.svc/ (код ответа: 307).

Итак, я сделал запрос HEAD по этой ссылке, я получил ответ Method Not Allowed ...
Думаю, проблема исходит от моей компании.

Привет!

Спасибо за предоставленные подробности!

2.1.7.post1 на данный момент немного устарело, не могли бы вы дать ему еще один шанс, но с _latest_ версией ( 2.1.10.1 на данный момент) его можно загрузить через GitHub:

pip install git+https://github.com/vgrem/Office365-REST-Python-Client.git

или из альтернативного индекса

С тех пор было исправлено несколько ошибок с точки зрения аутентификации.

Я установил последнюю версию и все работает нормально! (На самом деле это было довольно просто решить! :))
Спасибо за помощь: D

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