2017-07-28 16 views
5

私はoauth2認証でリクエストセッションを使用しています。 小さなファイルをアップロードするとすべて正常に動作しますが、4GBファイルの場合、トークンの期限切れエラーが発生します。ファイルがアップロードされたように見えますが、クローズセッションのパートトークンがもう一度検証されます。ファイルがアップロードされる前にトークンが期限切れになりました

この状況を処理する機会はありますか? セッションが閉じられる前に、トークンをリフレッシュして大きなファイルをアップロードしますか?

コードのサンプルは以下のとおりです。ありがとうございました。乾杯!

import requests 
from io import StringIO 

from requests_toolbelt.multipart.encoder import MultipartEncoder 


TOKEN_PAYLOAD = { 
    'grant_type': 'password', 
    'client_id': '###', 
    'client_secret': '###', 
    'username': '###', 
    'password': '####' 
} 


def get_token(): 
    response = requests.post(
     'https://oauth/token', 
     params=TOKEN_PAYLOAD) 
    response_data = response.json() 
    token = response_data.get('access_token') 
    return token 


# Create test file 
MB = 1024 ** 2 
GB = MB * 1024 

encoded_string = 'x' * 4 * GB 
file_test = StringIO() 
file_test.write(encoded_string) 

# Get token 
token = get_token() 

# Create form 
multipart_data = MultipartEncoder(
    fields={ 
     '--': ('4GB_test.txt', file_test, 'text/plain'), 
     'id': '2217', 
     'fileFieldDefId': '4258', 
    } 
) 

# Create headers 
headers = { 
    "Authorization": "Bearer {}".format(token), 
    'Content-Type': multipart_data.content_type 
} 

session = requests.Session() 

response = session.post(
    'https://oauth2/rest/external/item/multipartUpdate/byId', 
    headers=headers, 
    data=multipart_data, 
) 

print(response) 
# <Response [401]> 

print(response.content) 
# b'{"error":"invalid_token","error_description":"Access token expired: 0f7f6bd9-4e21-407f-4a78347711a9"}' 


# response.close() ? with refreshed token 
# session.close() ? with refreshed token 
+0

はアップロードロジックのサーバー側を変更することができます使用するように持っているか、あなたはそれを制御することはできませんか? –

+0

いいえ、サーバーへのアクセスはありません。APIエンドポイントのみ –

答えて

1

あなたはより多くの時間のために有効なアクセストークンを持っているしたい場合は、また、リフレッシュトークンを要求することができますし、古いものの有効期限が切れるたびに新しいアクセストークンを生成するためにそれらを使用しています。通常、アクセストークンは1時間有効ですが、タイマーを維持し、タイマーが60分に達するたびに新しいアクセストークンを生成することができます。そうすれば、より長いセッションのための有効なアクセストークンを持つことができます。

あなたがgrant_type=refresh_tokenhttps://tools.ietf.org/html/rfc6749#section-6

+0

ええ、そうかもしれませんが、問題を解決するには、クライアントAPIサポートでこれを確認する必要があります。ありがとうございました。 –

+0

偉大な、あなたの助けのために、問題を修正する:)、彼らは今週の爽やかなトークン機能をリリース:) –

関連する問題