Office365-rest-python-client: "TypeError: no se pueden concatenar objetos 'str' y 'NoneType'" a pedido para obtener un archivo.

Creado en 12 jun. 2017  ·  14Comentarios  ·  Fuente: vgrem/Office365-REST-Python-Client

Estoy intentando descargar un archivo al que se puede acceder (a través de un navegador) en esta URL:
https://test.sharepoint.com/sites/team/team documentos / subcarpeta / document.docx

Estoy usando un objeto ClientRequest con el siguiente código:

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)

Al ejecutar esto, obtengo el siguiente rastro:

$ 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

¿Hay algún problema con la forma en que uso el módulo?

bug

Comentario más útil

Tuve un problema similar porque nuestra instancia de SharePoint se ejecuta detrás de un proxy. Tuve que crear una subclase de SamlTokenProvider para anular la URL de inicio de sesión ( self.sts ) y los nombres de las cookies. Creo que el problema es que durante la inicialización, el código no comprueba el resultado de acquire_authentication_cookie por lo que si la autenticación falla, no se entera hasta que se utilizan las cookies.

Todos 14 comentarios

Tuve un problema similar porque nuestra instancia de SharePoint se ejecuta detrás de un proxy. Tuve que crear una subclase de SamlTokenProvider para anular la URL de inicio de sesión ( self.sts ) y los nombres de las cookies. Creo que el problema es que durante la inicialización, el código no comprueba el resultado de acquire_authentication_cookie por lo que si la autenticación falla, no se entera hasta que se utilizan las cookies.

Me encontré con el mismo problema. Parece que las fallas de autenticación no son manejadas por excepciones. Solo aparece cuando se consultan las cookies. Verifique sus credenciales

Mismo problema. Credenciales comprobadas pero el problema persiste. ¿Algún otro pensamiento? ¡Gracias!

Terminé usando OAuth2Session para obtener la autenticación oauth2 y obtener datos de la API gráfica. Ha pasado un tiempo y ya no recuerdo los detalles exactos.

Gracias lo comprobará.

Hola, tengo el mismo problema, pero en mi caso creo que es porque tengo sharepoint configurado con el método FormAuthentication. De ninguna manera funcionará hasta que se implemente el proveedor de tokens adecuado

También estoy tropezando con este problema, pero solo si estoy usando una cuenta de outlook.com. Espero que alguien pueda explicar lo que sucede detrás de escena y quizás ofrecer una solución. Aquí hay una breve explicación:

1) Nuestro sitio de SharePoint está en la nube (https://mn365.sharepoint.com)
2) Cuando establezco la conexión con el sitio con mis credenciales del estado de Minnesota, se conecta perfectamente.
3) Pero como no quiero tener mis propias credenciales incrustadas en mi aplicación, creé una "cuenta de servicio" en la línea de " [email protected] ". Esta cuenta falla.

¿Cuál sería la diferencia en la autenticación entre usar una dirección de outlook.com y una emitida por mi organización (en este caso, firstName. [email protected]?

El mismo problema aqui. Estamos usando AD FS para la autenticación. Hasta ahora no encontré ninguna forma de obtener información de nuestro servidor en línea de sharepoint. Probé muchas bibliotecas pero nada funcionó para mí.

Tuve el mismo error porque sharepoint estaba redirigiendo para la autenticación al STS / ADFS local.

Creamos un nuevo usuario de O365 directamente en O365 para que no use la redirección al STS / ADFS local. Esto resolvió el error 👍

Me cambié a sharepy, que se ejecuta fuera de línea y cubre mis condiciones.

Aquí igual:
No se pudieron encontrar controladores para el registrador "office365.runtime.auth.saml_token_provider.SamlTokenProvider._process_service_token_response"

¿Alguna suerte de los demás?

Quizás lo siguiente ayude a reducirlo aún más.

Puedo autenticarme con éxito en la URL de sharepoint general, pero no en una URL que apunte a un canal de equipos específico. El siguiente código funciona 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):

Pero cuando reemplazo la URL con:

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

entonces me sale el siguiente error:

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

Se agradece cualquier solución alternativa: en mi navegador puedo verlos a ambos muy bien.

Encontramos una solución para el caso de uso anterior. Simplemente use la URL base para obtener AuthenticationContext . Se pueden crear nuevos objetos ClientContext usando diferentes 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)
..
..

¡Hola, chicos!

Desde el momento en que se informó este problema hasta ahora, se han realizado las siguientes mejoras / correcciones de errores en términos de _ compatibilidad con la autenticación federada basada en SAML con SharePoint Online_:

  • # 210 - No se puede conectar a SharePoint (error adquirido_authentication_cookie si está federado)
  • # 170 - Ocurrió un error al recuperar el token: AADSTS50126: Error al validar las credenciales debido a un nombre de usuario o contraseña no válidos
  • # 85 - Usando Office-365-REST con ADFS
  • # 84 - Los sitios con STS en las instalaciones no se autentican (AADSTS70002)

Por lo tanto, el error proporcionado ya no debería ocurrir, solo asegúrese de obtener la versión _latest_ ( 2.1.10.1 o superior).

¿Fue útil esta página
0 / 5 - 0 calificaciones