Office365-rest-python-client: Ocorreu um erro ao recuperar cookies de autenticação de https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc

Criado em 5 ago. 2020  ·  3Comentários  ·  Fonte: vgrem/Office365-REST-Python-Client

Olá,

Contexto do problema

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

Alguns detalhes sobre o problema

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 !

question

Todos 3 comentários

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

Esta página foi útil?
0 / 5 - 0 avaliações