Office365-rest-python-client: Se produjo un error al recuperar las cookies de autenticación de https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc

Creado en 5 ago. 2020  ·  3Comentarios  ·  Fuente: vgrem/Office365-REST-Python-Client

Hola,

Contexto del problema

Estoy trabajando con la versión 2.1.7.post1 (según pip freeze), no se requiere MFA para iniciar sesión en sharepoint.
Actualmente estoy tratando de obtener un archivo de Excel desde el punto compartido de la empresa, con el siguiente script (creado a partir de README del proyecto):

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']))

La ejecución de este script proporciona el siguiente resultado:
An error occurred while retrieving auth cookies from https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc

Algunos detalles sobre el problema

Al ejecutar este script en modo de depuración, noté que el problema proviene del método acquire_authentication_cookie de la clase SamlTokenProvider
En realidad, el método se llama con federated=True por lo que la solicitud HTTP se realiza en https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc con el método HEAD. Puede encontrar debajo la parte donde falla:

     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 respuesta no contiene ninguna cookie, por eso aparece el mensaje de error.

Por cierto, tuve el mismo problema cuando configuré la URL en ' https://mycompany.sharepoint.com '.

Avísame si no he dado suficientes detalles sobre el problema.
Gracias de antemano !

question

Todos 3 comentarios

Algunas novedades sobre el tema:

Cuando hago una solicitud HEAD a https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc con curl, me redirigen a https://mycompany.sharepoint.com/_vti_bin/idcrl.svc/ (código de respuesta: 307).

Así que hice una solicitud HEAD a este enlace, obtuve una respuesta de Método no permitido ...
Supongo que el problema viene del lado de mi empresa.

¡Saludos!

¡Gracias por los detalles proporcionados!

2.1.7.post1 está un poco desactualizado en este momento, podría intentarlo de nuevo, pero con la versión _latest_ ( 2.1.10.1 en este momento), podría descargarse a través de GitHub:

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

o de un índice alternativo

Desde entonces, se han resuelto algunas correcciones de errores en términos de autenticación.

¡Instalé la última versión y funciona bien! (¡Eso fue bastante simple de resolver! :))
Gracias por la ayuda: D

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