0

要使用Google API,从Google Developers Console中激活Google API后,需要生成凭证。就我而言,我有一个应该使用API​​服务器端的后端。为此,可以选择生成Google页面调用的“服务器应用程序密钥”。到现在为止还挺好。GAE:无法使用Google服务器端API(白名单问题)

问题是,为了生成密钥,必须提及将列入白名单的服务器的IP地址。但是GAE没有我可以在那里使用的静态IP地址。

有一个选项,以手动通过执行获得IP的:

dig -t TXT _netblocks.google.com @ns1.google.com 

但不保证该列表是静态的(进一步,已知的是,改变不时)并且没有任何程序化的方式可以实现我从挖掘Google Developers Console中添加IP的自动化。

这给我留下了两个选择:

  1. 忘记GAE这个项目,讽刺的是,GAE不能作为谷歌的API(最好使用亚马逊或一些其他的解决方案)在后台运行。或者
  2. 在dig命令的输出上编写一些类似于监视程序的东西,它会通知我是否有更改,然后手动更新白名单(不会导致我这样做 - 太危险),或者允许所有IP使用Google API授予它拥有我的API密钥。不是最安全的解决方案,但它工作。

是否有其他解决方法? GAE不支持使用Google API的服务器端吗?

回答

1

您可以使用App Identity从AppEngine访问Google的API。请参阅:https://developers.google.com/appengine/docs/python/appidentity/。如果您使用云端控制台设置您的应用程序,则应该已经将您的应用程序的身份添加到了您项目的许可中,但您始终可以检查该应用程序。从您的项目云控制台的“权限”选项卡中,确保您的服务帐户添加到“服务帐户”下([email protected]的形式)

此外,如果您使用类似JSON API的可用于python的库,您可以使用捆绑的oauth2库为您执行所有这些操作,使用AppAssertionCredentials来授权您希望使用的API。请参阅:https://developers.google.com/api-client-library/python/guide/google_app_engine#ServiceAccounts

+0

谢谢,但似乎这不会与所有工作Google API。 例如,我使用google自定义搜索API,并且没有OAuth2范围(它只支持用于身份验证的API密钥,只要我可以收集)。因此,App Identity API毕竟不能用于识别我的GAE应用程序。 看起来谷歌不支持使用谷歌自己的云基础设施来处理谷歌API的......非常荒谬的恕我直言。 – orcaman

+0

大多数API都可以使用OAUTH2身份验证和AppEngine。然而,你原来的问题并没有说明你正在使用CS API,因此我相应地回答了。这可能是一个你运气不好的API。您可以尝试使用计算引擎。如果您有Google支持,您可以打开一张票以获得进一步的建议。 – someone1

1

是的,您应该使用应用程序标识。忘掉得到一个IP或者GAE :-)放弃这里是如何使用大的查询,例如,一个GAE应用程序内部的例子:

static { 
    // initializes Big Query 
    JsonFactory jsonFactory = new JacksonFactory(); 
    HttpTransport httpTransport = new UrlFetchTransport(); 
    AppIdentityCredential credential = new AppIdentityCredential(Arrays.asList(Constants.BIGQUERY_SCOPE)); 
    bigquery = new Bigquery.Builder(httpTransport, jsonFactory, credential) 
      .setApplicationName(Constants.APPLICATION_NAME).setHttpRequestInitializer(credential) 
      .setBigqueryRequestInitializer(new BigqueryRequestInitializer(Constants.API_KEY)).build(); 
} 
+0

谢谢,但似乎这不适用于所有Google API。例如,我使用google自定义搜索API,并且没有OAuth2范围(它只支持用于身份验证的API密钥,只要我可以收集)。因此,App Identity API毕竟不能用于识别我的GAE应用程序。看起来Google不支持使用Google自己的云基础架构来处理Google API ...非常荒谬的恕我直言 – orcaman

相关问题