Office365-rest-python-client: https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svcから認証Cookieを取得中にエラーが発生しました

作成日 2020年08月05日  ·  3コメント  ·  ソース: vgrem/Office365-REST-Python-Client

こんにちは、

問題のコンテキスト

私はバージョン2.1.7.post1。SharePointにログインするためにMFAは必要ありません。
私は現在、次のスクリプト(プロジェクトのREADMEから作成)を使用して、会社のSharePointからExcelファイルを取得しようとしています。

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

このスクリプトを実行すると、次の出力が得られます。
An error occurred while retrieving auth cookies from https://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svc

問題に関する詳細

このスクリプトをデバッグモードで実行すると、問題はクラスSamlTokenProviderのメソッドacquire_authentication_cookieに起因することに気付きました。
実際には、メソッドはfederated=True呼び出されるため、HTTPリクエストはhttps://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svcでHEADメソッドを使用して実行され

     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

応答にCookieが含まれていないため、メッセージエラーが発生します。

ちなみに、URLを「 https://mycompany.sharepoint.com 」に設定しても同じ問題が発生しました。

問題について十分な詳細を提供していない場合はお知らせください。
前もって感謝します !

question

全てのコメント3件

この問題に関するいくつかのニュース:

curlを使用してhttps://mycompany.sharepoint.com/sites/documentssite//_vti_bin/idcrl.svcにHEADリクエストを送信すると、 (応答コード:307)。

だから私はこのリンクにHEADリクエストをしました、私はメソッドが許可されていない応答を受け取りました...
問題は私の会社側から来ていると思います。

ご挨拶!

提供された詳細をありがとう!

2.1.7.post1は現在少し古くなっています。もう一度試してみてください。ただし、_latest_バージョン(現時点では2.1.10.1 )を使用すると、GitHubからダウンロードできます。

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

または代替インデックスから

それ以来、認証に関していくつかのバグ修正が解決されています。

私は最後のバージョンをインストールしました、そしてそれはうまくいきます! (それは実際にそれを解決するのは非常に簡単でした!:))
助けてくれてありがとう:D

このページは役に立ちましたか?
0 / 5 - 0 評価