Office365-rest-python-client: 「TypeError:ファイルを取得する要求に応じて、「str」オブジェクトと「NoneType」オブジェクトを連結できません」。

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

このURLで(ブラウザ経由で)アクセスできるファイルをダウンロードしようとしています:
https://test.sharepoint.com/sites/team/team documents / subfolder / document.docx

次のコードでClientRequestオブジェクトを使用しています。

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)

これを実行すると、次のトレースが得られます。

$ 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

モジュールの使い方に問題はありますか?

bug

最も参考になるコメント

SharePointインスタンスがプロキシの背後で実行されているため、同様の問題が発生しました。 ログインURL( self.sts )とCookie名を上書きするには、 SamlTokenProviderをサブクラス化する必要がありました。 問題は、初期化中にコードがacquire_authentication_cookieの結果をチェックしないため、認証が失敗した場合、Cookieが使用されるまでそのことを知らないということだと思います。

全てのコメント14件

SharePointインスタンスがプロキシの背後で実行されているため、同様の問題が発生しました。 ログインURL( self.sts )とCookie名を上書きするには、 SamlTokenProviderをサブクラス化する必要がありました。 問題は、初期化中にコードがacquire_authentication_cookieの結果をチェックしないため、認証が失敗した場合、Cookieが使用されるまでそのことを知らないということだと思います。

私は同じ問題に遭遇しました。 認証の失敗は例外によって処理されないようです。 クッキーが照会された場合にのみ泡立ちます。 クレデンシャルを確認してください

同じ問題。 クレデンシャルを確認しましたが、問題は解決しません。 他の考えはありますか? ありがとう!

最終的に OAuth2Sessionを使用して oauth2 認証を取得し、グラフ API からデータを取得しました。 しばらく経ちましたが、正確な詳細はもう覚えていません。

おかげでそれをチェックします。

こんにちは、私は同じ問題を抱えていますが、私の場合は、FormAuthenticationメソッドでSharePointを構成しているためだと思います。 適切なトークンプロバイダーが実装されるまで、それは機能しません

私もこの問題にぶつかっていますが、outlook.comアカウントを使用している場合に限ります。 誰かが舞台裏で何が起こっているのかを説明し、おそらく解決策を提供してくれることを願っています。 ここに簡単な説明があります:

1) 私たちの SharePoint サイトはクラウドにあります (https://mn365.sharepoint.com)
2) ミネソタ州の資格情報を使用してサイトに接続すると、正常に接続されます。
3)しかし、自分の資格情報をアプリケーションに埋め込みたくないので、「 [email protected] 」に沿って「サービスアカウント」を作成しました。 このアカウントは失敗します。

outlook.comアドレスを使用する場合と、組織が発行するアドレス(この場合はfirstName。[email protected])を使用する場合の認証の違いは何ですか?

ここでも同じ問題があります。 認証にADFSを使用しています。 今まで、SharePointオンラインサーバーから情報を取得する方法は見つかりませんでした。 私はたくさんのライブラリを試しましたが、何もうまくいきませんでした。

共有ポイントが認証のためにオンプレミスの STS/ADFS にリダイレクトしていたため、同じエラーが発生しました。

オンプレミスのSTS / ADFSへのリダイレクトを使用しないように、O365で直接新しいO365ユーザーを作成しました。 これでエラーが解決しました👍

私は、ootbを実行し、私の状態をカバーするsharepyに切り替えました

こっちも一緒:
ロガー「office365.runtime.auth.saml_token_provider.SamlTokenProvider._process_service_token_response」のハンドラーが見つかりませんでした

他の人からの幸運はありますか?

たぶん、以下はそれをさらに絞り込むのに役立ちます。

一般的なSharePointURLで正常に認証できますが、特定のチームチャネルを指しているURLでは認証できません。 次のコードは正常に機能します。

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):

しかし、URLを次のように置き換えると:

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

その後、次のエラーが表示されます::

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

回避策はありがたいですが、私のブラウザでは、両方とも問題なく表示されます。

上記のユースケースの回避策が見つかりました。 AuthenticationContextを取得するためにベースURLを使用するだけです。 新しいClientContextオブジェクトは、さまざまな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)
..
..

やあみんな!

この問題が報告された瞬間から現在まで、_SharePoint Onlineを使用したSAMLベースのフェデレーション認証のサポート_に関して、次の改善/バグ修正が行われました。

  • #210-SharePointに接続できません(フェデレーションの場合はacquire_authentication_cookieエラー)
  • #170-トークンの取得中にエラーが発生しました:AADSTS50126:無効なユーザー名またはパスワードが原因で資格情報の検証中にエラーが発生しました
  • #85-ADFSでOffice-365-RESTを使用する
  • #84-オンプレミスSTSのあるサイトは認証されません(AADSTS70002)

したがって、提供されたエラーは発生しなくなります。必ず_latest_バージョン( 2.1.10.1以上)を取得してください。

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