2014-01-20 1 views
39

私は現在com.google.appendinge.api.appidentity.AppIdentityServiceを使用して認証を容易にするアプリケーションを持っています。&同じアプリ[ie。同じアカウント]のスプレッドシートデータをSpreadsheetService API経由で送信します。 GAE環境に配備された生産モードで優れた作業を行います。しかし明らかな理由から、私の開発環境では動作しません(認証エラー、驚くことはありません)。開発サーバーでのAppIdentityServiceの使用の設定

私の質問は:&は、AppIdentityServiceを意図したとおりに動作させるために必要な鍵&証明書情報を使用するようにローカル開発サーバーを設定するために 'サポートされていますか?

私は記事https://sites.google.com/site/oauthgoog/authenticate-google-app-engine-appを読んで、私はそれが可能であるが、私は&このに関するいかなるフィードバックプロ&詐欺をいただければ幸い誤理解のキーポイントであること示唆し、それを理解しています。

完璧な世界では、私はテストモードを可能な限り密接に模倣することを望んでいます。私はまた、私のテストenvで '通常の' oauth2 Webアプリ認証を使用することを検討していますが、可能な限りAppIdentityServiceを使用することを強く望みます。

私はappengine-api-stubs.jarcom.google.appengine.api.appidentity.dev.LocalAppIdentityServiceクラスが意図した技術だと思っていますが、開発サーバー内でAppIdentityServiceの認証を提供するためにこれを使用している他の人もいますか?私の初期の前提は、上記のLocalAppIentityServiceクラスを使用して自分自身のファクトリクラスを使用するようにcom.google.appengine.spi.FactoryProviderにあるクラスcom.google.appengine.api.appidentity.IAppIdentityServiceFactoryProviderを置き換えることです。それとも、私は間違った木を吠えるのですか?

GAE SDK 1.8.8 for Javaを使用しています。

+2

私はAppIdentityを使用するのが大変だとは思わない:AppIdentityの信頼アンカーは、App Engine in Prodである。開発環境では、とにかく新しいトラストアンカー(サービスアカウント)が必要です。あなたは新しいAppIdentityServiceをプログラミングするかもしれませんが、どうして迷惑でしょうか?とにかくDevには新しいユーザーと、それでは別のコードが必要です。 私は、DriveServiceとSpreadsheetServiceを生成するファクトリを、ProIdentity(Prod)またはサービスアカウント(Dev)を使用して使用します。 AppIdentityとサービスアカウントはドライブで異なる権限を取得しますが、サービスアカウントはテストデータにのみアクセスできます。 –

答えて

1

ローカル開発サーバーで実行している場合、GAE Java App Identity APIはGoogleCredentials library to retrieve the default application credentialを呼び出します。

  1. 環境変数GOOGLE_APPLICATION_CREDENTIALSがチェックされます。この変数が指定されている場合は、 が資格を定義するファイルを指している必要があります。この 目的のために資格を取得する最も簡単な方法は、サブセクション資格情報で、認証セクションでのAPI &をGoogle Developers Consoleを使用してサービスアカウントを作成することです。サービスアカウント を作成するか、既存のサービスアカウントを選択して新しいJSONキーを生成を選択します。 環境変数をダウンロードしたJSONファイルのパスに設定します。
  2. マシンにGoogle Cloud SDKをインストールして、コマンドgcloud auth loginを実行した場合、あなたのIDは としてプロキシとして使用して、そのマシンからAPIを呼び出すことができます。
  3. Google App Engineプロダクションで実行している場合は、アプリケーションに関連付けられている組み込みサービスアカウントが使用されます。
  4. Google Compute Engineプロダクションで実行している場合は、仮想マシンインスタンス に関連付けられているビルトインサービスアカウントが使用されます。
  5. これらのいずれの条件も当てはまらない場合、エラーが発生します。

オプション#2は、(ローカルで実行したときにあなたのコードが認証にGoogleアカウントを使用して持っているgcloud auth loginを実行して)あなたのために、おそらく最も簡単ですが、あなたはまた、#1を行うことができますように見えます。

1

私はGAEのPHP開発サーバーで作業しており、AppIdentityサービスが正しく動作しないという同じ問題がありました。 PHPでは$_SERVER['APPLICATION_ID']dev~yourapplicationidに設定することでこれを回避できます。私は、Javaで同じことをする方法がなければならないと確信しています.DV環境で動作するには、アプリケーションIDの先頭にdev~を追加する必要があります。