Office365-rest-python-client: Une erreur s'est produite lors de la récupération des cookies d'authentification de https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc

Créé le 5 août 2020  ·  3Commentaires  ·  Source: vgrem/Office365-REST-Python-Client

Bonjour,

Contexte du problème

Je travaille avec la version 2.1.7.post1 (selon pip freeze), aucun MFA requis pour se connecter à sharepoint.
J'essaye actuellement d'obtenir un fichier excel depuis le sharepoint de l'entreprise, avec le script suivant (construit à partir du README du projet) :

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']))

L'exécution de ce script fournit la sortie suivante :
An error occurred while retrieving auth cookies from https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc

Quelques détails sur le problème

J'ai remarqué en exécutant ce script en mode débogage, que le problème vient de la méthode acquire_authentication_cookie de la classe SamlTokenProvider
En fait, la méthode est appelée avec federated=True donc la requête HTTP se fait sur https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc avec la méthode HEAD. Vous pouvez trouver ci-dessous la partie où il échoue :

     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

La réponse ne contient aucun cookie, c'est pourquoi je reçois le message d'erreur.

Soit dit en passant, j'ai eu le même problème lorsque j'ai défini l'url sur ' https://mycompany.sharepoint.com '.

Faites-moi savoir si je n'ai pas donné assez de détails sur le problème.
Merci d'avance !

question

Tous les 3 commentaires

Quelques nouvelles du problème :

Lorsque je fais une demande HEAD à https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc avec curl, j'ai été redirigé vers https://mycompany.sharepoint.com/_vti_bin/idcrl.svc/ (code réponse : 307).

J'ai donc fait une requête HEAD sur ce lien, j'ai eu une réponse Méthode non autorisée...
Je suppose que le problème vient du côté de mon entreprise.

Les salutations!

Merci pour les détails fournis!

2.1.7.post1 est un peu obsolète pour le moment, pourriez-vous s'il vous plaît lui donner un autre coup mais avec la _dernière_ version ( 2.1.10.1 pour le moment), il pourrait être téléchargé via GitHub :

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

ou à partir d'un indice alternatif

Quelques corrections de bugs ont été résolues depuis lors en termes d'authentification.

J'ai installé la dernière version et ça marche bien ! (C'était assez simple à résoudre en fait ! :) )
Merci pour l'aide :D

Cette page vous a été utile?
0 / 5 - 0 notes