访问Google表格&来自Google App Engine的Google非云平台API - NodeJS Flexible Environment

时间:2018-01-23 12:58:02

标签: node.js google-app-engine google-cloud-platform google-compute-engine google-sheets-api

有没有人在GAE flex环境中运行NodeJS应用程序?

我有一个关于向非云平台Google API(例如Google云端硬盘,Google表格等,而非云存储等)进行身份验证的具体问题。

我一直在使用Google的ADC并遵循此处描述的方法:https://github.com/google/google-api-nodejs-client#choosing-the-correct-credential-type-automatically

之前这对我有用 - 我能够使用ADC通过Cloud KMS& amp;云存储。

但是,我无法使用Google表格API发布功能(它根据用户交互将数据写入工作表,以便我可以轻松地将此数据提供给业务团队),因为它在本地运行ADC和服务客户端密钥文件,用于创建JWT,但不在生产中运行。

由于NodeJS上没有任何具体的例子,我最终走下了查看单独节点文档以解决我的问题的兔子洞。

特别是,Sheets API声明我需要使用OAuth 2,但是这些文档说我最好坚持使用ADC: - https://cloud.google.com/appengine/docs/flexible/nodejs/authorizing-apps#oauth_20_authorization - https://developers.google.com/identity/protocols/OAuth2ServiceAccount

为什么它会与我的GAE服务帐户的JWT的本地副本一起使用,而不是Compute引擎服务帐户?我已将appengine和计算引擎服务帐户电子邮件添加到具有写访问权限的电子表格中,但它似乎不适用于后者。

我一直遇到同样的错误,我的代码在本地工作,我可以将值附加到我的应用引擎电子邮件有权写入的工作表中,但在生产中,我继续得到相同的错误,说应用已经权限不足:`“Sheets API返回错误:错误:尝试检索Compute Engine内置服务帐户的访问令牌时返回了Forbidden错误。这可能是因为Compute Engine实例没有正确的权限指定的范围。请求的认证范围不足。“ 所以我也做了域范围的权限授权,并且做了关于添加正确访问权限的每一件事都可以找到。

我的主要问题是,我是否可以继续使用此代码中列出的方法(https://github.com/google/google-api-nodejs-client#choosing-the-correct-credential-type-automatically),还是应该像本文档中那样使用OAuth2(https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests)?如果我需要使用OAuth2,如果我甚至无法在我的env变量中加载我自己的凭据而无法访问Google的Sheets API,那么即使是GAE的重点是什么?

我做错了吗?

2 个答案:

答案 0 :(得分:1)

I recently wrote NodeJS code that writes to a spreadsheet。它使用服务帐户并从密钥文件创建JWT。我的代码作为Cloud Function运行,但也许可以为您提供解决GAE问题的思路。

答案 1 :(得分:0)

如Martin所述,您可以通过带有节点客户端库的Google Sheets API访问Google Sheets。我会点击该链接以获取详细信息。

以下是摘要:

  1. 创建一个服务帐户。将其命名为credentials.json
  2. 启用Google Sheets API
  3. 复制在步骤1中找到的电子邮件地址。
  4. 与电子邮件地址共享Google表格。
  5. 调用Google Sheets API,并使用上面创建的凭据进行授权。

链接: