Привет,
Я работаю с версией 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 .
Сообщите мне, если я недостаточно подробно рассказал о проблеме.
Заранее спасибо !
Немного новостей о проблеме:
Когда я делаю запрос 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