2016-07-11 122 views
2

我正嘗試在Java Google App Engine應用程序中使用應用程序默認憑據。在本地運行時,證書工作正常,下面的示例代碼按預期記錄我的服務帳戶ID和訪問令牌。Google應用程序默認憑據不在雲中工作

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()); 
} 

但是,運行雲中部署的這個確切的代碼時的日誌如下:

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 

是否有任何理由爲什麼應用程序默認憑據是空的雲?有一些配置,我錯過了嗎?根據Authentication Docs這應該只是自動工作:

如果您需要在Google App Engine上運行您的代碼,您應該使用應用程序默認憑據(ADC)。使用ADC的客戶端庫在運行時自動從App Engine獲取內置服務帳戶憑據。

+0

我也看到這仍然。你能夠追查下來嗎? – Wendel

+0

我從來沒有設法解決這個問題。最後,我只是將AuthCredentials.createForJson()用於我的服務帳戶密鑰文件。 – Wayzgoose

+0

也有這個問題,但您目前無法從默認的appengine憑據中獲取該信息。如果你不得不冒充某人,你必須在你的資源中添加.json並手工分析它。 – Pievis

回答

0

要使用Google應用程序默認憑據,您首先需要設置環境變量GOOGLE_APPLICATION_CREDENTIALS

要做到這一點你appengine-web.xml這包括:

<env-variables> 
    <env-var name="GOOGLE_APPLICATION_CREDENTIALS" value="WEB-INF/<name your Json File>.json" /> 
</env-variables> 
相關問題