Office365-rest-python-client: IndexError : index de la liste hors limites

Créé le 8 déc. 2020  ·  14Commentaires  ·  Source: vgrem/Office365-REST-Python-Client

Cher Monsieur,
Pourriez-vous m'aider à savoir pourquoi je ne me connecte plus à sharepoint ?

Avec la version 2.2.2, tout fonctionnait bien.
Ensuite, le problème n° 272 s'est produit (une erreur s'est produite lors de la récupération du jeton à partir de la réponse XML : AADSTS500069), j'ai donc mis à niveau vers la version 2.3.0.1.
Maintenant, le code suivant ne fonctionne pas non plus :
def copy_sharepoint(self,filename="") :
ctx = ClientContext(self.SITE_SHAREPOINT).with_credentials(UserCredential(self.WIN_USER,self.WIN_PASSWORD))
localpath=os.path.join(self.CHEMIN_XLSX ,self.NOM_TIR + '/',self.FICHIER_BI)
self.print_debug("",cheminlocal)
self.print_debug("",self.WIN_PASSWORD)
avec open(localpath, 'rb') comme content_file :
file_content = content_file.read()
file = ctx.web.get_folder_by_server_relative_url(self.CHEMIN_SHAREPOINT).upload_file(self.FICHIER_BI, file_content).execute_query()

Traceback (appel le plus récent en dernier) :
Fichier "/appli/sopra/tools/tir_bench.py", ligne 1327, dans
tir_bench.copy_sharepoint()
Fichier "/appli/sopra/tools/tir_bench.py", ligne 1278, dans copy_sharepoint
file = ctx.web.get_folder_by_server_relative_url(self.CHEMIN_SHAREPOINT).upload_file(self.FICHIER_BI, file_content).execute_query()
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_object.py", ligne 30, dans execute_query
self.context.execute_query()
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_runtime_context.py", ligne 138, dans execute_query
self.pending_request().execute_query()
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_request.py", ligne 73, dans execute_query
self.beforeExecute.notify(demande)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/types/EventHandler.py", ligne 18, dans notify
écouteur( args, * kwargs)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", ligne 162, dans _build_modification_query
self.ensure_form_digest(demande)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", ligne 123, dans assurer_form_digest
self.request_form_digest()
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", ligne 130, dans request_form_digest
réponse = self.execute_request_direct(request)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_runtime_context.py", ligne 134, dans execute_request_direct
return self.pending_request().execute_request_direct(request)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/odata/odata_request.py", ligne 34, dans execute_request_direct
return super(ODataRequest, self).execute_request_direct(request)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_request.py", ligne 86, dans execute_request_direct
self.context.authenticate_request(request_options)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", ligne 151, dans authentication_request
self._auth_context.authenticate_request(request)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/authentication_context.py", ligne 84, dans authentication_request
self._provider.authenticate_request(request)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", ligne 73, dans authentication_request
self.ensure_authentication_cookie()

Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", ligne 80, dans assurer_authentication_cookie
self._cached_auth_cookies = self.get_authentication_cookie()
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", ligne 93, dans get_authentication_cookie
jeton = self._acquire_service_token_from_adfs(user_realm.STSAuthUrl)
Fichier "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", ligne 136, dans _acquire_service_token_from_adfs
assertion_node = dom.getElementsByTagNameNS("urn:oasis:names:tc:SAML:1.0:assertion", 'Assertion')[0].toxml()
IndexError : index de la liste hors limites

Pourriez-vous s'il vous plaît m'aider avec ce problème?

Merci d'avance,
Guillaume

bug

Tous les 14 commentaires

Bonjour,
De plus, voici la valeur de response.content.decode())

http://www.w3.org/2005/08/addressing/soap/faultcfb81633-ff49-4e50-9544-7e39214d7122
<value i="14">s:Sender</value><subcode i="15"><value i="16">a:InvalidSecurity</value></subcode>Une erreur s'est produite lors de la vérification de la sécurité du message.

Les salutations!

merci pour le journal détaillé, pour le moment je n'ai aucune possibilité de le vérifier par rapport à SharePoint/ADFS env.

@wreiner , peut-être pourriez-vous gentiment confirmer si l'_authentification fédérée_ fonctionne comme prévu de votre côté pour la dernière version ?

Salut à tous

J'ai des problèmes similaires, la ligne suivante me donne une réponse 400 ou 500.

https://github.com/vgrem/Office365-REST-Python-Client/blob/020c8c8176ce2eea3accbe95e2e4372af57ef6c8/office365/runtime/auth/providers/saml_token_provider.py#L133

Si j'obtiens la réponse 400, le corps est vide, ce qui entraîne une exception xml.parsers.expat.ExpatError: no element found: line 1, column 0 . la réponse 500 donne la même exception que @guillaume-colas.

Je n'ai pas encore fait fonctionner le package, il pourrait donc bien s'agir du serveur sharepoint, mais je vais essayer de rétrograder le package juste pour être sûr. Comment puis-je m'assurer que l'authentification sharepoint est correctement configurée ?

Merci d'avance !

Salut,

Je ne suis pas sur mon ordinateur pour analyser complètement mais comme je le vois, lorsque j'installe la dernière version avec pip, la fonction _acquire_service_token_from_adfs_ est manquante dans _runtime/auth/providers/saml_token_provider.py_.

Dans ma pull request, il n'y a pas de suppression de cette fonction, donc je ne sais pas pourquoi elle est manquante. De plus, mon correctif pour le format datetime n'est pas dans le fichier. Peut-être y a-t-il eu une erreur lors de la fusion ?

@wreiner merci pour votre retour, concernant

Acquisition_service_token_from_adfs est manquant

il a été remanié de la méthode publique à la méthode privée .

mon correctif pour le format datetime n'est pas dans le fichier

le format doit être en place tel qu'il a été validé à l'origine, mais il a été remanié un peu en termes de déplacement de la déclaration vers sts_profile.py

self.created = now.astimezone(timezone.utc).isoformat('T')[:-9] + 'Z' self.expires = (now + timedelta(minutes=10)).astimezone(timezone.utc).isoformat('T')[:-9] + 'Z'

Mais si quelque chose manque après la fusion, je devrais être blâmé.

Salut à tous

J'ai des problèmes similaires, la ligne suivante me donne une réponse 400 ou 500.

https://github.com/vgrem/Office365-REST-Python-Client/blob/020c8c8176ce2eea3accbe95e2e4372af57ef6c8/office365/runtime/auth/providers/saml_token_provider.py#L133

Si j'obtiens la réponse 400, le corps est vide, ce qui entraîne une exception xml.parsers.expat.ExpatError: no element found: line 1, column 0 . la réponse 500 donne la même exception que @guillaume-colas.

Je n'ai pas encore fait fonctionner le package, il pourrait donc bien s'agir du serveur sharepoint, mais je vais essayer de rétrograder le package juste pour être sûr. Comment puis-je m'assurer que l'authentification sharepoint est correctement configurée ?

Merci d'avance !

Salut Mark,

merci de me le confirmer, il apparaît en effet dans la dernière version authentification fédérée (SharePoint/ADFS) quelque peu cassé
Pourriez-vous l'essayer pour la version _précédente_ ( 2.2.2 ) ?

Je n'ai pas terminé l'analyse, mais pour mes modifications, je peux dire qu'ils renvoient correctement le jeton de sécurité et le cookie, mais le pot de cookie ne contient pas de champ 'FedAuth' qui est recherché dans is_valid_auth_cookies qui est maintenant utilisé dans _get_authentication_cookie.

https://github.com/vgrem/Office365-REST-Python-Client/blob/93325ea33675b86aafc2e6e0fa381c184ce479e7/office365/runtime/auth/providers/saml_token_provider.py#L32

Pour l'authentification fédérée, je ne vois que SPOIDCRL dans le pot.

Actuellement, je ne parviens toujours pas à utiliser correctement les données d'authentification obtenues, je suis toujours en train d'enquêter mais je ne peux pas dire de combien de temps j'aurai besoin.

Dans l'ensemble, je peux dire qu'avec l'ancienne version et mes correctifs, tout fonctionne toujours comme prévu, mais malheureusement pas avec la nouvelle version.

Merci pour les réponses rapides :-)

@vgrem, il obtient une erreur similaire sur la version 2.2.2, il semble donc que ce soit le serveur sharepoint.

Il serait peut-être bien d'envelopper l'exception dans une exception plus lisible.

Je suis un pas de plus. Il s'est avéré que j'avais besoin de réinitialiser mon mot de passe. Je rencontre maintenant la même erreur que @wreiner. Le is_valid_auth_cookies renvoie que le cookie n'est pas valide, car le dictionnaire ne contient que la clé SPOIDCRL et aucune clé FedAuth. Si je viens de commenter cette vérification, si le cookie est valide ou non. Je peux télécharger des fichiers depuis sharepoint. L'authentification semble donc fonctionner correctement.

Je vais peut-être réessayer la version 2.2.2.

J'ai le même problème. is_valid_auth_cookies return False raison de l'absence FedAuth clé

def is_valid_auth_cookies(values):
    return True
    # return any(values) and values.get('FedAuth', None) is not None

Hey @hungnguyen95 , merci de me l'avoir confirmé !

Il s'avère que is_valid_auth_cookies doit être ajusté.

Bonjour,
Mon problème sera-t-il résolu en modifiant is_valid_auth_cookies ?

Je suis assez perdu ici désolé. Je pensais que mon problème était dans _acquire_service_token_from_adfs.
Avez-vous une idée de la raison pour laquelle je reçois la réponse « Sécurité non valide » et, espérons-le, une solution de contournement pour m'authentifier ?

Merci d'avance pour votre aide.
Guillaume

@guillaume-colas il semble que votre problème soit probablement lié au serveur qui ne vous permet pas d'accéder. Êtes-vous sûr que le mot de passe est correct et avez-vous essayé de réinitialiser votre mot de passe ? La réinitialisation de mon mot de passe a résolu ce problème. Après quoi je suis tombé sur le problème is_valid_auth_cookies .

@mark-boer Oui, j'ai vérifié mon mot de passe et il est correct. Est-il possible que l'authentification avec 2FA (code sms) bloque l'authentification ?

Est-il possible d'utiliser ClientCredentials pour télécharger des fichiers sur sharepoint ?

Merci d'avance pour votre aide

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