Office365-rest-python-client: "TypeError : impossible de concaténer les objets 'str' et 'NoneType'" sur demande pour obtenir un fichier.

Créé le 12 juin 2017  ·  14Commentaires  ·  Source: vgrem/Office365-REST-Python-Client

J'essaye de télécharger un fichier accessible (via un navigateur) sur cette URL :
https://test.sharepoint.com/sites/team/team documents/subfolder/document.docx

J'utilise un objet ClientRequest avec le code suivant :

url = "https://test.sharepoint.com/sites/team"
username="[email protected]"
password="pass"
ctxAuth = AuthenticationContext(url)
if ctxAuth.acquire_token_for_user(username, password):
    print 'authentication successful, proceeding...'
    request = ClientRequest(ctxAuth)
    requestUrl="{0}/_api/web/getfilebyserverrelativeurl('team documents/subfolder/document.docx')"
    options=RequestOptions(requestUrl.format(url))
    data = request.execute_query_direct(options)

En exécutant ceci, j'obtiens la trace suivante:

$ python test.py
No handlers could be found for logger "client.office365.runtime.auth.saml_token_provider.SamlTokenProvider.process_service_token_response"
authentication successful, proceeding...
Traceback (most recent call last):
  File "test.py", line 14, in <module>
    data = request.execute_query_direct(options)
  File "/usr/lib/python2.7/site-packages/client/office365/runtime/client_request.py", line 77, in execute_query_direct
    self.context.authenticate_request(request_options)
  File "/usr/lib/python2.7/site-packages/client/office365/runtime/auth/authentication_context.py", line 20, in authenticate_request
    request_options.set_header('Cookie', self.provider.get_authentication_cookie())
  File "/usr/lib/python2.7/site-packages/client/office365/runtime/auth/saml_token_provider.py", line 65, in get_authentication_cookie
    return 'FedAuth=' + self.FedAuth + '; rtFa=' + self.rtFa
TypeError: cannot concatenate 'str' and 'NoneType' objects

Y a-t-il quelque chose qui ne va pas dans la façon dont j'utilise le module ?

bug

Commentaire le plus utile

J'ai eu un problème similaire car notre instance SharePoint s'exécute derrière un proxy. J'ai dû sous-classer le SamlTokenProvider pour remplacer l'URL de connexion ( self.sts ) et les noms de cookies. Je pense que le problème est que lors de l'initialisation, le code ne vérifie pas le résultat de acquire_authentication_cookie donc si l'authentification échoue, vous n'en entendez pas parler jusqu'à ce que les cookies soient utilisés.

Tous les 14 commentaires

J'ai eu un problème similaire car notre instance SharePoint s'exécute derrière un proxy. J'ai dû sous-classer le SamlTokenProvider pour remplacer l'URL de connexion ( self.sts ) et les noms de cookies. Je pense que le problème est que lors de l'initialisation, le code ne vérifie pas le résultat de acquire_authentication_cookie donc si l'authentification échoue, vous n'en entendez pas parler jusqu'à ce que les cookies soient utilisés.

Je suis tombé sur le même problème. Il semble que les échecs d'authentification ne soient pas gérés par des exceptions. Il ne bouillonne que lorsque les cookies sont interrogés. Vérifiez vos identifiants

Même problème. Informations d'identification vérifiées, mais le problème persiste. D'autres réflexions ? Merci!

J'ai fini par utiliser OAuth2Session pour obtenir l'authentification oauth2 et récupérer les données de l'API graphique. ça fait un moment et je ne me souviens plus des détails exacts.

Merci va vérifier.

Salut, j'ai le même problème, mais dans mon cas, je pense que c'est parce que j'ai configuré sharepoint avec la méthode FormAuthentication. Cela ne fonctionnera pas tant que le bon fournisseur de jetons ne sera pas mis en œuvre

Je rencontre également ce problème, mais uniquement si j'utilise un compte Outlook.com. J'espère que quelqu'un pourra expliquer ce qui se passe dans les coulisses et peut-être proposer une solution. Voici une brève explication :

1) Notre site SharePoint est dans le cloud (https://mn365.sharepoint.com)
2) Lorsque je me connecte au site à l'aide de mes informations d'identification de l'État du Minnesota, il se connecte très bien.
3) Mais comme je ne veux pas que mes propres informations d'identification soient intégrées dans mon application, j'ai créé un "compte de service" sur le modèle de "

Quelle serait la différence d'authentification entre l'utilisation d'une adresse outlook.com et celle émise par mon organisation (dans ce cas firstName. [email protected] ?

Même problème ici. Nous utilisons AD FS pour l'authentification. Jusqu'à présent, je n'ai trouvé aucun moyen d'obtenir des informations de notre serveur en ligne sharepoint. J'ai essayé beaucoup de bibliothèques mais rien n'a fonctionné pour moi.

J'ai eu la même erreur car sharepoint redirigeait pour l'authentification vers le STS/ADFS sur site.

Nous avons créé un nouvel utilisateur O365 directement dans O365 afin qu'il n'utilise pas la redirection vers le STS/ADFS sur site. Cela a résolu l'erreur

Je suis passé à sharepy, qui exécute ootb et couvre mes conditions

Pareil ici:
Aucun gestionnaire n'a pu être trouvé pour l'enregistreur "office365.runtime.auth.saml_token_provider.SamlTokenProvider._process_service_token_response"

La chance des autres ?

Peut-être que ce qui suit aide à le réduire davantage.

Je peux m'authentifier avec succès sur l'URL sharepoint générale, mais pas sur une URL qui pointe vers un canal d'équipe spécifique. Le bout de code suivant fonctionne très bien :

url = "https://COMPANYNAME.sharepoint.com/"
username=raw_input("username: ")
password=raw_input("password: ")
ctx_auth = AuthenticationContext(url=url)
if ctx_auth.acquire_token_for_user(username=username, password=password):

Mais quand je remplace l'URL par :

url = "https://COMPANYNAME.sharepoint.com/sites/TEAMSCHANNEL/"

alors j'obtiens l'erreur suivante ::

No handlers could be found for logger "office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_authentication_cookie"

Toute solution de contournement est appréciée - dans mon navigateur, je peux très bien les voir tous les deux.

Nous avons trouvé une solution de contournement pour le cas d'utilisation ci-dessus. Utilisez simplement l'URL de base pour obtenir le AuthenticationContext . De nouveaux objets ClientContext peuvent être créés en utilisant différentes URL.

base_url = "https://COMPANYNAME.sharepoint.com/"
ctx_auth = AuthenticationContext(url=base_url)
if not ctx_auth.acquire_token_for_user(username=user, password=password):
    sys.exit('Error in getting token - quitting')
url = base_url + "sites/TEAMSCHANNEL/"
ctx = ClientContext(url, ctx_auth)
..
..

Salut les gars!

Depuis le moment où ce problème a été signalé jusqu'à présent, les améliorations/corrections de bogues suivantes ont été apportées en termes de _prise en charge de l'authentification fédérée basée sur SAML avec SharePoint Online_ :

  • #210 - Impossible de se connecter à SharePoint (erreur d'acquisition_authentication_cookie si fédéré)
  • #170 - Une erreur s'est produite lors de la récupération du jeton : AADSTS50126 : Erreur de validation des informations d'identification en raison d'un nom d'utilisateur ou d'un mot de passe invalide
  • #85 - Utiliser Office-365-REST avec ADFS
  • #84 - Les sites avec STS sur site ne s'authentifient pas (AADSTS70002)

Ainsi, l'erreur fournie ne devrait plus se produire, assurez-vous simplement de récupérer la _dernière_ version ( 2.1.10.1 ou supérieure).

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

Questions connexes

AakashBasu picture AakashBasu  ·  9Commentaires

oktorok picture oktorok  ·  5Commentaires

domdinicola picture domdinicola  ·  4Commentaires

continda picture continda  ·  4Commentaires

ahulist picture ahulist  ·  5Commentaires