2017-04-25 10 views
3

スプレッドシートを読み込む必要があるサーバーアプリケーションを作成しています。サーバーがサービスアカウントにアクセスできるため、oauth2client.clientGoogleCredentials.get_application_default()を使用しています。ローカル開発では個人の認証情報を使用したいので、Google Cloud SDKを使用しています。私はgcloud auth application-default loginを使ってそれが動作することを確認しました。サービスを作成するGoogleスプレッドシート+ GoogleCredentials = "認証スコープが不十分"

は同じくらい簡単のようにある:

from oauth2client.client import GoogleCredentials 
from googleapiclient.discovery import build 

credentials = GoogleCredentials.get_application_default() 
service = build('sheets', 'v4', credentials=credentials) 

そして実際に、それはGoogleのクラウド製品の束のために、これまでのところうまく働いています。シートのAPIを使用しているときの要求を実行するとき はしかし、私は次のエラーを取得する:これはGoogleスプレッドシートAPIで発生し

googleapiclient.errors.HttpError: 
<HttpError 403 when requesting https://sheets.googleapis.com/v4/spreadsheets/... 
returned "Request had insufficient authentication scopes."> 

は、(そのようBigQueryのV2のAPIなど)他のAPIは、うまく動作します。

私はすでに確認されているもの:

シートのAPIは、Googleクラウドプロジェクトで有効になっている
  • は私が試した
  • Googleクラウドプロジェクトにスプレッドシートやエディタ権利へのアクセス権を持っていますスコープ付きの資格情報を作成するさまざまな方法は、次のようになります。

    credentials = GoogleCredentials.get_application_default() 
    scoped_creds = credentials.create_scoped(SCOPES) 
    

    ただし、これは効果がないようですe create_scopedメソッドはself(source)を返します。

  • 私はそのプロジェクトでサービスアカウントを作成し、それを指すように環境変数GOOGLE_APPLICATION_CREDENTIALSを設定しました。それは実際にcreate_scopedメソッドの実装を持っているServiceAccountCredentialsを使用しているため、うまく動作します。私は、最新のGoogle-API-のpython-クライアントのバージョン(1.6.2)とoauth2clientを使用しています
  • (4.0.0)

は、ここに右のトラックに私をアムまたは私は単純に本当にばか何かが欠けています?

答えて

0

は私がthe Google Identity Platform docsの底にこの質問への(やや期待はずれの)答えを見つけることが推測:

もしローカルで使用するために、独自のアイデンティティを提供するために、GoogleクラウドSDKのgcloud認証アプリケーションのデフォルトloginコマンドを使用してすべてのGoogle Cloud APIスコープが含まれていますが、スコープのセットは現在固定されています。このセット以外のスコープが必要な場合は、ダウンロードしたサービスアカウントキーを使用することをお勧めします。

0

googleapiclient.discoveryの代わりにapiclient.discoveryを使用してください。 build()にあまりにも多くの引数を渡していたときも同じ問題がありましたが、一度それらの余分な引数を取り除くと、うまくいきました。コードとの唯一の違いは、どのモジュールからですか。discoveryからです。

関連する問題