JavaのGoogle App Engineアプリケーションでアプリケーションのデフォルトの資格情報を使用しようとしています。ローカルで実行する場合、資格情報は正常に動作し、次のコード例は、サービスアカウントIDとアクセストークンを期待どおりに記録します。Googleアプリケーションの既定の資格情報がクラウドで機能しない
16:03:58.585 com.test.servlet.MyServlet doGet: Service Account Id: null
16:03:58.681 com.test.servlet.MyServlet doGet: Access Token: null
アプリケーションのデフォルトの資格情報がクラウドにnullになる理由何らかの理由がある:クラウドに展開、この正確なコードを実行するときに、次のように
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Literally one line of code for GAE credentials
GoogleCredential credential = GoogleCredential.getApplicationDefault();
LOGGER.log(Level.INFO, "Service Account Id: {0}", credential.getServiceAccountId());
LOGGER.log(Level.INFO, "Access Token: {0}", credential.getAccessToken());
}
はしかし、ログはありますか?私が紛失している設定がいくつかありますか? Authentication Docsによれば、これは自動的に動作します。
Google App Engineでコードを実行する必要がある場合は、Application Default Credentials(ADC)を使用する必要があります。 ADCを使用するクライアントライブラリは、実行時に自動的にApp Engineから組み込みのサービスアカウントの資格情報を取得します。
:
はあなたのappengine-web.xml
でこれを含めることができません。これを追跡できましたか? – Wendel私はこれを解決できませんでした。最後に、代わりに私のサービスアカウントキーファイルでAuthCredentials.createForJson()を使用しました。 – Wayzgoose
この問題もありましたが、現在、デフォルトのappengine資格情報からその情報を取得できません。誰かを偽装する必要がある場合は、リソースに.jsonを追加し、手動で解析する必要があります。 – Pievis