Office365-rest-python-client: Erreur dans Acquisition_token_for_user

Créé le 4 déc. 2019  ·  11Commentaires  ·  Source: vgrem/Office365-REST-Python-Client

Bonjour,

J'ai essayé de me connecter à mon portail intranet Sharepoint avec Office365-REST-Python-Client, mais cela échoue lors de l'appel de receive_token_for_user() à partir de la classe AuthenticationContext :

url = " https://mycompany.sharepoint.com "
ctx_auth = AuthenticationContext(url)
ctx_auth.acquire_token_for_user ("mon_nom d'utilisateur", "mon_mot de passe")

déclenche l'erreur suivante :

AttributeError : l'objet 'NoneType' n'a pas d'attribut 'text'

Salutations,
marque

question

Commentaire le plus utile

Ça marche pour moi aussi. L'URL peut également être quelque chose comme " https://mycompany.sharepoint.com/sites/AnotherSite " ou " https://mycompany.sharepoint.com/sites/AnotherSite/Subsite "

Essayez plutôt avec ce code :

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.runtime.client_request import ClientRequest
from office365.runtime.utilities.request_options import RequestOptions

user_credentials = {
    'username' : '[email protected]',
    'password' : 'my_password'
}

site_url = "https://mycompany.sharepoint.com/"

ctx_auth = AuthenticationContext(site_url)
if ctx_auth.acquire_token_for_user(user_credentials['username'], user_credentials['password']):
  request = ClientRequest(ctx_auth)
  options = RequestOptions("{0}/_api/web/lists".format(site_url))
  options.set_header('Accept', 'application/json')
  options.set_header('Content-Type', 'application/json')
  data = request.execute_request_direct(options)
  s = json.loads(data.content)

Tous les 11 commentaires

j'ai exactement le même problème

Idem, cela vient d'apparaître, je ne peux plus accéder au point de partage.

J'ai le même problème et je ne peux pas accéder au point de partage d'entreprise. Dans un autre numéro (#76, au 5 août 2018) montre la solution suivante (qui n'a pas encore fonctionné pour moi):

_Résolu. Le problème était l'utilisation d'un utilisateur de l'entreprise, pour lequel une vérification est effectuée, uniquement via un navigateur, entre Azure Active Directory et Active Direcotry interne. Pour le script batch, j'ai créé un utilisateur dans le cloud AAD._

En fait, j'ai mon utilisateur dans l'AAD, mais je ne peux toujours pas accéder :( une solution/un indice ?

Mon code fonctionne :
userName = 'monnom d'utilisateur'
passWord = 'monmotdepasse'
ctx_auth.acquire_token_for_user (nom d'utilisateur = nom d'utilisateur, mot de passe = mot de passe)

Ça marche pour moi aussi. L'URL peut également être quelque chose comme " https://mycompany.sharepoint.com/sites/AnotherSite " ou " https://mycompany.sharepoint.com/sites/AnotherSite/Subsite "

Essayez plutôt avec ce code :

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.runtime.client_request import ClientRequest
from office365.runtime.utilities.request_options import RequestOptions

user_credentials = {
    'username' : '[email protected]',
    'password' : 'my_password'
}

site_url = "https://mycompany.sharepoint.com/"

ctx_auth = AuthenticationContext(site_url)
if ctx_auth.acquire_token_for_user(user_credentials['username'], user_credentials['password']):
  request = ClientRequest(ctx_auth)
  options = RequestOptions("{0}/_api/web/lists".format(site_url))
  options.set_header('Accept', 'application/json')
  options.set_header('Content-Type', 'application/json')
  data = request.execute_request_direct(options)
  s = json.loads(data.content)

Ce problème devrait être résolu avec PullRequest #168
Vous devriez maintenant voir un message d'erreur plus spécifique.
Nous avons eu cette erreur spécifique chaque fois que l'authentification a échoué.

Remarque : vous devez effectuer une mise à niveau vers la dernière version 2.1.6-1

Salut Mark, @KasperSvendsen et @fpinab ,

juste une petite mise à jour, puisque vous avez mentionné:

En fait, j'ai mon utilisateur dans l'AAD

Je pense que vous vous référez au scénario Office 365 Single Sign-On pour ADFS , ce flux n'était pas pris en charge et c'est probablement la raison pour laquelle l'erreur fournie s'est produite.

La bonne nouvelle, la prise en charge de l'authentification fédérée basée sur SAML avec SharePoint Online a été introduite dans la version 2.1.7 , ce qui signifie que l'authentification avec les comptes d'utilisateurs Active Directory devrait fonctionner comme prévu maintenant.

Conditions préalables

Il est supposé que l' authentification multifacteur pour un utilisateur est désactivée

Remarques

étant donné que la nouvelle version n'a pas encore été publiée sur PyPi, elle doit être installée à partir de GitHub pour le moment, comme ceci :

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

À votre santé,
Vadim

@vgrem
J'ai mis à jour vers la nouvelle version afin d'essayer de prendre en charge le scénario ADFS. mais je ne fonctionne toujours pas.
ci-dessous est l'exemple de code:

from office365.runtime.auth.authentication_context import AuthenticationContext
account = "[email protected]"
password = "example"
url = "https://example.sharepoint.com/sites/base-dok-testing"

ctx_auth = AuthenticationContext(url)
ctx_auth.acquire_token_for_user(account, password)

ci-dessous le journal :

16/Jun/2020 10:18:15] DEBUG [none] [office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_token:acquire_token:45] acquire_token called
[16/Jun/2020 10:18:15] DEBUG [none] [office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_token:acquire_token:48] Acquiring Access Token..
[16/Jun/2020 10:18:15] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): login.microsoftonline.com:443
[16/Jun/2020 10:18:16] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://login.microsoftonline.com:443 "POST /GetUserRealm.srf HTTP/1.1" 200 1448
[16/Jun/2020 10:18:16] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): fs.kerialis.fr:443
[16/Jun/2020 10:18:20] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://fs.kerialis.fr:443 "POST /adfs/services/trust/2005/usernamemixed HTTP/1.1" 200 6542
[16/Jun/2020 10:18:20] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): login.microsoftonline.com:443
[16/Jun/2020 10:18:21] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://login.microsoftonline.com:443 "POST /rst2.srf HTTP/1.1" 200 3499
[16/Jun/2020 10:18:21] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): kerialisfr.sharepoint.com:443
[16/Jun/2020 10:18:21] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://kerialisfr.sharepoint.com:443 "HEAD /sites/base-dok-testing/_vti_bin/idcrl.svc HTTP/1.1" 401 0
[16/Jun/2020 10:18:21] ERROR [none] [office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_authentication_cookie:acquire_authentication_cookie:208] An error occurred while retrieving auth cookies from https://kerialisfr.sharepoint.com/sites/base-dok-testing/_vti_bin/idcrl.svc

@Simplici , êtes-vous v2.1.8 ou une version ultérieure est utilisée de votre côté ?

Sinon, vous pourriez tomber sur le même problème que celui signalé ici .

@vgrem j'utilisais 2.1.7.post1.

je mets à jour vers la dernière version 2.1.9, le résultat est le même.

mon collègue a fait quelques modifications et ensuite cela fonctionne : https://github.com/vgrem/Office365-REST-Python-Client/issues/210.

@vgrem J'ai le même problème. Le code ci-dessous renvoie l'erreur "Une erreur s'est produite lors de la récupération des cookies d'authentification de https://company.sharepoint.com/_vti_bin/idcrl.svc "

J'ai également installé 2.1.7.post1 mais je n'ai pas d'accès administrateur pour vérifier l'authentification multifacteur.

depuis office365.runtime.auth.authentication_context importer AuthenticationContext
depuis office365.sharepoint.client_context importer ClientContext
à partir du fichier d'importation office365.sharepoint.file

url = ' https://entreprise.sharepoint.com '
nom d'utilisateur = ' [email protected] '
mot de passe = 'xxx'

ctx_auth = AuthenticationContext(url)

si ctx_auth.acquire_token_for_user(nom d'utilisateur, mot de passe) :
ctx = ClientContext(url, ctx_auth)
web = ctx.web
...

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