Olá,
Estou trabalhando com a versão 2.1.7.post1 (de acordo com o pip freeze), nenhum MFA necessário para fazer login no sharepoint.
No momento, estou tentando obter um arquivo excel do sharepoint da empresa, com o seguinte script (criado a partir do README do projeto):
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']))
A execução deste script fornece a seguinte saída:
An error occurred while retrieving auth cookies from https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc
Percebi ao executar este script em modo de depuração, que o problema vem do método acquire_authentication_cookie
da classe SamlTokenProvider
Na verdade, o método é chamado com federated=True
então a solicitação HTTP é feita em https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc com o método HEAD. Você pode encontrar abaixo a parte em que falha:
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
A resposta não contém nenhum cookie, por isso recebo a mensagem de erro.
A propósito, tive o mesmo problema ao definir o url como ' https://mycompany.sharepoint.com '.
Avise-me se não tiver dado detalhes suficientes sobre o problema.
Agradeço antecipadamente !
Algumas novidades sobre o assunto:
Quando faço uma solicitação HEAD para https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc com curl, fui redirecionado para https://mycompany.sharepoint.com/_vti_bin/idcrl.svc/ (código de resposta: 307).
Então fiz uma solicitação HEAD para este link, recebi uma resposta de Método não permitido ...
Acho que o problema vem do lado da minha empresa.
Saudações!
Obrigado pelos detalhes fornecidos!
2.1.7.post1
está um pouco desatualizado no momento, você poderia tentar novamente, mas com a versão _mais recente_ ( 2.1.10.1
no momento), ele pode ser baixado via GitHub:
pip install git+https://github.com/vgrem/Office365-REST-Python-Client.git
ou de um índice alternativo
Algumas correções de bug foram resolvidas desde então em termos de autenticação.
Instalei a última versão e funciona bem! (Isso foi muito simples de resolver na verdade! :))
Obrigado pela ajuda: D