2014-01-20 167 views
39

上使用AppIdentityService的我目前使用com.google.appendinge.api.appidentity.AppIdentityService便於認證&授權使用相同的應用程序的[即一個應用程序。相同的帳戶]電子表格數據通過SpreadsheetService API。在部署到GAE環境的生產模式下非常有效。但是,由於顯而易見的原因,它在我的開發appengine環境中運行並不起作用(認證錯誤,並不奇怪)。配置開發服務器

我的問題是:是否有可能&「支持」一個人的本地開發服務器配置爲使用所需的關鍵&證書信息,使AppIdentityService按預期工作?

我讀的文章https://sites.google.com/site/oauthgoog/authenticate-google-app-engine-app我理解它表明,它是可能的,但我被錯誤地理解關鍵點&將不勝感激對此的任何反饋Pro & CON。

在一個完美的世界中,我希望我的測試環境儘可能地模仿生產模式。我也在考慮在我的測試環境中使用'normal'oauth2 web應用程序認證,但如果可能的話,寧願堅持使用AppIdentityService。

我懷疑appengine-api-stubs.jar中的com.google.appengine.api.appidentity.dev.LocalAppIdentityService類是預期的技術,但有其他人也使用它來在開發服務器中提供AppIdentityService驗證嗎?我最初的假設是將com.google.appengine.spi.FactoryProvider中的類com.google.appengine.api.appidentity.IAppIdentityServiceFactoryProvider替換爲使用我自己的工廠類,使用上面的LocalAppIdentityService類。還是我吠叫錯了樹?

使用適用於Java的GAE SDK 1.8.8。

+2

我不認爲使用AppIdentity有很多意義:AppIdentity的信任錨是Prod中的App Engine。在開發環境中,無論如何您都需要新的信任錨(即服務帳戶)。你可能編寫一個新的AppIdentityService,但爲什麼要麻煩? Dev中無論如何都需要一個新用戶,因此需要不同的代碼。 我使用生成DriveService和SpreadsheetService的工廠,使用AppIdentity(在Prod中)或服務帳戶(在Dev中)。 AppIdentity和服務帳戶在Drive中獲得不同的權限,服務帳戶只能訪問測試數據。 –

回答

1

當本地開發服務器中運行時,GAE的Java應用的身份API調用GoogleCredentials library to retrieve the default application credential

  1. 環境變量GOOGLE_APPLICATION_CREDENTIALS檢查。如果指定了這個變量,它應該指向一個 定義憑證的文件。得到這個 用途憑證的最簡單方法是使用Google Developers Console在部分的API &驗證創建一個服務帳戶,在次節憑據。創建一個服務帳戶 或選擇一個現有帳戶並選擇生成新的JSON密鑰。將 環境變量設置爲下載的JSON文件的路徑。
  2. 如果您已在您的計算機上安裝了Google Cloud SDK並運行了命令gcloud auth login,那麼您的身份可用作 代理來測試來自該計算機的代碼調用API。
  3. 如果您在Google App Engine生產中運行,則將使用與應用程序關聯的內置服務帳戶。
  4. 如果你在谷歌Compute Engine的生產運行,內置與虛擬機實例 相關的服務帳戶將被使用。
  5. 如果這些條件都不成立,則會發生錯誤。

它看起來像選項#2可能是最簡單的你(運行gcloud auth login有你的代碼中使用您的谷歌帳戶進行驗證時,在本地運行),但你也可以做#1。

1

我一直在使用GAE的PHP開發服務器,並且與AppIdentity服務工作不正常相同。在PHP中,您可以通過將$_SERVER['APPLICATION_ID']設置爲dev~yourapplicationid來解決此問題。我確信必須有一種方法可以在Java中執行相同的操作,您只需將dev~添加到應用程序標識的開頭即可與開發環境一起使用。