2016-07-11 8 views
2

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から組み込みのサービスアカウントの資格情報を取得します。

+0

はあなたのappengine-web.xmlでこれを含めることができません。これを追跡できましたか? – Wendel

+0

私はこれを解決できませんでした。最後に、代わりに私のサービスアカウントキーファイルでAuthCredentials.createForJson()を使用しました。 – Wayzgoose

+0

この問題もありましたが、現在、デフォルトのappengine資格情報からその情報を取得できません。誰かを偽装する必要がある場合は、リソースに.jsonを追加し、手動で解析する必要があります。 – Pievis

答えて

0

Googleアプリケーションのデフォルトの認証情報を使用するには、まず環境変数GOOGLE_APPLICATION_CREDENTIALSを設定する必要があります。私もまだこれを見ている

<env-variables> 
    <env-var name="GOOGLE_APPLICATION_CREDENTIALS" value="WEB-INF/<name your Json File>.json" /> 
</env-variables> 
関連する問題