要使用Google API,在从Google Developers Console激活后,需要生成凭据。在我的情况下,我有一个应该使用API服务器端的后端。为此,可以选择生成Google页面所称的“服务器应用程序密钥”。到现在为止还挺好。
问题在于,为了生成密钥,必须提到将被列入白名单的服务器的IP地址。但GAE没有我可以在那里使用的静态IP地址。
可以选择手动通过执行以下方式获取IP:
dig -t TXT _netblocks.google.com @ns1.google.com
然而,无法保证列表是静态的(更进一步,已知会不时更改),并且没有编程方式可以自动使用我从挖掘到谷歌中添加的IP开发人员控制台。
这让我有两个选择:
还有其他解决方法吗?是否GAE不支持使用Google API的服务器端?
答案 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();
}