Bonjour,
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
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 !
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