GAE:可以使用Google Server Side API' s(白名单问题)

时间:2014-06-29 15:00:48

标签: python google-app-engine google-api google-cloud-platform

要使用Google API,在从Google Developers Console激活后,需要生成凭据。在我的情况下,我有一个应该使用API​​服务器端的后端。为此,可以选择生成Google页面所称的“服务器应用程序密钥”。到现在为止还挺好。

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

可以选择手动通过执行以下方式获取IP:

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

然而,无法保证列表是静态的(更进一步,已知会不时更改),并且没有编程方式可以自动使用我从挖掘到谷歌中添加的IP开发人员控制台。

这让我有两个选择:

  1. 忘记这个项目的GAE,具有讽刺意味的是,GAE不能用作Google API的后端(更好地使用亚马逊或其他解决方案)。或
  2. 在dig命令的输出上编写类似看门狗的东西,如果有变化会通知我,然后我会手动更新白名单(我不会这样做 - 太危险了),或者允许所有IP的使用已授权的Google API,它具有我的API密钥。不是最安全的解决方案,但它确实有效。
  3. 还有其他解决方法吗?是否GAE不支持使用Google API的服务器端?

2 个答案:

答案 0 :(得分:1)

您可以使用App Identity从AppEngine访问Google的API。见:https://developers.google.com/appengine/docs/python/appidentity/。如果您使用云控制台设置应用程序,它应该已经添加了您的应用程序的标识,并允许您的项目,但您可以随时检查它。来自"权限"在云控制台中为您的项目选项卡,确保您的服务帐户已添加到"服务帐户" (以your_app_id@appspot.gserviceaccount.com

的形式

此外,如果你使用类似于python的JSON API Libs之类的东西,你可以使用捆绑的oauth2库为你做所有这些,使用AppAssertionCredentials来授权你想要使用的API。请参阅:https://developers.google.com/api-client-library/python/guide/google_app_engine#ServiceAccounts

答案 1 :(得分:1)

是的,您应该使用App Identity。忘记获取IP或放弃GAE :-)以下是如何使用Big Query的示例,例如,在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();
}