App Engine とサービス アカウントを使用した Google ドライブへのアクセスは正常に機能します。これを機能させるには、ドライブ ファイルをサービス アカウント名 appid@appspot.gserviceaccount.com と共有する必要もありました。
しかし、GAE SDK を使用すると 401 が返されます。その理由は、共有用の SDK の service_account 名にあると思います。SDK のサービス アカウント名は次のとおりです: test@localhost によると:
app_identity.get_service_account_name() # returns test@localhost
SDK コンソールのエラー メッセージ:
エラーが発生しました: https://www.googleapis.com/drive/v2/files/0B9-mE....................nM/children?alt=json&key =AI.................................N0 が「無効な認証情報」を返しました">
これは、Google ドライブにアクセスするためのコードです:
def get(self):
SCOPE = 'https://www.googleapis.com/auth/drive'
credentials = AppAssertionCredentials(scope=SCOPE)
logging.info(app_identity.get_service_account_name())
http = credentials.authorize(httplib2.Http())
if os.environ['SERVER_SOFTWARE'].startswith('Development') :
service = build('drive', 'v2', http=http, developerKey='...API key...')
else :
service = build('drive', 'v2', http=http, developerKey='...APY key...')
# drive requests
アップデート :
私の個人的な意見 : SDK の service_account 名でドライブ共有を作成できないため、これは GAE でのみ機能し、SDK では機能しません。または、別のサービス アカウント名を指定することは可能ですか。