Office365-rest-python-client: IndexError:リストインデックスが範囲外です

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

拝啓、
私がSharePointに接続しなくなった理由を見つけるのを手伝っていただけませんか。

バージョン2.2.2では、すべてが正常に機能していました。
次に、問題#272が発生したため(XML応答からトークンを取得中にエラーが発生しました:AADSTS500069)、2.3.0.1にアップグレードしました。
現在、次のコードも機能しません。
def copy_sharepoint(self、filename = ""):
ctx = ClientContext(self.SITE_SHAREPOINT).with_credentials(UserCredential(self.WIN_USER、self.WIN_PASSWORD))
localpath = os.path.join(self.CHEMIN_XLSX、self.NOM_TIR + '/'、self.FICHIER_BI)
self.print_debug( ""、localpath)
self.print_debug( ""、self.WIN_PASSWORD)
content_fileとしてopen(localpath、 'rb')を使用:
file_content = content_file.read()
file = ctx.web.get_folder_by_server_relative_url(self.CHEMIN_SHAREPOINT).upload_file(self.FICHIER_BI、file_content).execute_query()

トレースバック(最後の最後の呼び出し):
ファイル "/appli/sopra/tools/tir_bench.py​​"、1327行目
tir_bench.copy_sharepoint()
copy_sharepointのファイル "/appli/sopra/tools/tir_bench.py​​"、行1278
file = ctx.web.get_folder_by_server_relative_url(self.CHEMIN_SHAREPOINT).upload_file(self.FICHIER_BI、file_content).execute_query()
execute_queryのファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_object.py"、30行目
self.context.execute_query()
execute_queryのファイル「/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_runtime_context.py」、138行目
self.pending_request()。execute_query()
execute_queryのファイル「/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_request.py」、73行目
self.beforeExecute.notify(request)
ファイル「/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/types/EventHandler.py」、18行目、notify
listener( args、* kwargs)
_build_modification_queryのファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py"、行162
self.ensure_form_digest(request)
ファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py"、行123、ensure_form_digest
self.request_form_digest()
ファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py"、行130、request_form_digest
応答= self.execute_request_direct(request)
execute_request_directのファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_runtime_context.py"、行134
self.pending_request()。execute_request_direct(request)を返します
execute_request_directのファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/odata/odata_request.py"、34行目
super(ODataRequest、self).execute_request_direct(request)を返します
execute_request_directのファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_request.py"、行86
self.context.authenticate_request(request_options)
authenticate_requestのファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py"、行151
self._auth_context.authenticate_request(request)
ファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/authentication_context.py"、84行目、authenticate_request
self._provider.authenticate_request(request)
ファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py"、73行目、authenticate_request
self.ensure_authentication_cookie()

ファイル「/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py」、80行目、ensure_authentication_cookie
self._cached_auth_cookies = self.get_authentication_cookie()
ファイル「/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py」、93行目、get_authentication_cookie
トークン= self._acquire_service_token_from_adfs(user_realm.STSAuthUrl)
ファイル "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py"、行136、_acquire_service_token_from_adfs
assertion_node = dom.getElementsByTagNameNS( "urn:oasis:names:tc:SAML:1.0:assertion"、 'Assertion')[0] .toxml()
IndexError:リストインデックスが範囲外です

その問題について私を助けてくれませんか。

前もって感謝します、
ギヨーム

bug

全てのコメント14件

こんにちは、
さらに、response.content.decode()の値は次のとおりです)

http://www.w3.org/2005/08/addressing/soap/faultcfb81633-ff49-4e50-9544-7e39214d7122
<value i="14">s:Sender</value><subcode i="15"><value i="16">a:InvalidSecurity</value></subcode>メッセージのセキュリティを確認するときにエラーが発生しました。

ご挨拶!

詳細なログをありがとうございます。現時点では、SharePoint / ADFSenvに対してログを検証する可能性がありません。

@wreiner 、最新リリースで_federated authentication_が期待どおりに機能しているかどうかを確認して

皆さんこんにちは

私は同様の問題を抱えています、次の行は私に400または500の応答を与えます。

https://github.com/vgrem/Office365-REST-Python-Client/blob/020c8c8176ce2eea3accbe95e2e4372af57ef6c8/office365/runtime/auth/providers/saml_token_provider.py#L133

400応答を受け取った場合、本文は空であり、 xml.parsers.expat.ExpatError: no element found: line 1, column 0例外が発生します。 500応答では、@ guillaume-colasと同じ例外が発生します。

パッケージがまだ機能していないので、SharePointサーバーである可能性がありますが、念のためパッケージをダウングレードしてみます。 SharePoint認証が正しく設定されていることを確認するにはどうすればよいですか?

事前にThx!

やあ、

私は完全に分析するために自分のコンピューターにいるわけではありませんが、pipを使用して最新バージョンをインストールすると、関数_acquire_service_token_from_adfs_が_runtime / auth / providers /saml_token_provider.py_にありません。

私のプルリクエストでは、この関数の削除はないので、なぜそれが欠落しているのかわかりません。 また、日時形式の修正はファイルにありません。 マージでエラーが発生した可能性がありますか?

@wreinerよろしくお願いします、

Acquisition_service_token_from_adfsがありません

パブリックメソッドからプライベートメソッドにリファクタリングさ

日時形式の修正がファイルにありません

フォーマットは最初にコミットされたとおりに配置する必要がありますが、宣言をsts_profile.pyに移動するという点で少しリファクタリングされています

self.created = now.astimezone(timezone.utc).isoformat('T')[:-9] + 'Z' self.expires = (now + timedelta(minutes=10)).astimezone(timezone.utc).isoformat('T')[:-9] + 'Z'

しかし、マージ後に何かが欠けている場合、私は非難されるべきです。

皆さんこんにちは

私は同様の問題を抱えています、次の行は私に400または500の応答を与えます。

https://github.com/vgrem/Office365-REST-Python-Client/blob/020c8c8176ce2eea3accbe95e2e4372af57ef6c8/office365/runtime/auth/providers/saml_token_provider.py#L133

400応答を受け取った場合、本文は空であり、 xml.parsers.expat.ExpatError: no element found: line 1, column 0例外が発生します。 500応答では、@ guillaume-colasと同じ例外が発生します。

パッケージがまだ機能していないので、SharePointサーバーである可能性がありますが、念のためパッケージをダウングレードしてみます。 SharePoint認証が正しく設定されていることを確認するにはどうすればよいですか?

事前にThx!

ハイマーク、

確認していただきありがとうございます。実際、最新バージョンのフェデレーション認証(SharePoint / ADFS)では多少壊れているようです。
_以前の_バージョン( 2.2.2 )を試してみてください。

私は完全な分析を行っていませんが、私の変更については、セキュリティトークンとCookieを正しく返すと言えますが、Cookie jarには、現在_get_authentication_cookieで使用されているis_valid_auth_cookiesで検索される「FedAuth」フィールドが含まれていません。

https://github.com/vgrem/Office365-REST-Python-Client/blob/93325ea33675b86aafc2e6e0fa381c184ce479e7/office365/runtime/auth/providers/saml_token_provider.py#L32

フェデレーション認証の場合、jarファイルにSPOIDCRLのみが表示されます。

現在、取得した認証データを正しく使用することはできません。調査中ですが、必要な期間がわかりません。

全体として、古いバージョンと私のパッチを使用しても、すべてが期待どおりに正常に機能しますが、残念ながら新しいバージョンでは機能しないことがわかります。

迅速な対応に感謝します:-)

@vgremバージョン2.2.2でも同様のエラーが発生するため、

例外をより読みやすいものにラップするとよい場合があります。

私はさらに一歩進んでいます。 パスワードをリセットする必要がありました。 @wreinerと同じエラーが発生しています。 is_valid_auth_cookiesは、ディクショナリにSPOIDCRLキーのみが含まれ、FedAuthキーが含まれていないため、Cookieが無効であることを返します。 このチェックをコメントアウトするだけで、Cookieが有効かどうかを確認できます。 SharePointからファイルをダウンロードできます。 したがって、認証は正常に機能しているようです。

たぶん、バージョン2.2.2をもう一度試してみます。

同じ問題があります。 is_valid_auth_cookiesは、cookies dictにFedAuthキーがないため、 False is_valid_auth_cookies返します。 戻りコードにコメントを付けて戻りTrueを単純化すると、認証は正常に機能します。

def is_valid_auth_cookies(values):
    return True
    # return any(values) and values.get('FedAuth', None) is not None

ねえ@ hungnguyen95 、確認してくれてありがとう!

is_valid_auth_cookiesを調整する必要があることがわかりました。

こんにちは、
is_valid_auth_cookiesを変更することで問題は修正されますか?

申し訳ありませんが、ここでかなり迷っています。 私の問題は_acquire_service_token_from_adfsにあると思いました。
なぜ私が「無効なセキュリティ」という応答を受け取り、うまくいけば認証を受けるための回避策を受け取っているのか分かりますか?

よろしくお願いします。
ギヨーム

@ guillaume-colasあなたの問題は、おそらくサーバーがアクセスを許可していないことに関連しているようです。 パスワードが正しいことを確認し、パスワードをリセットしてみましたか? パスワードをリセットすると、この問題は解決しました。 その後、 is_valid_auth_cookies問題が発生しました。

@ mark-boerはい、パスワードを確認しましたが、正しいです。 2FA(SMSコード)による認証が認証をブロックしている可能性はありますか?

ClientCredentialsを使用してファイルをSharePointにアップロードすることは可能ですか?

よろしくお願いします

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