0

我有一个在 App Engine 上运行的拉取任务队列。我正在尝试从 NodeJS REST 客户端外部访问队列: https ://github.com/google/google-api-nodejs-client

我将我的服务器 API 密钥与请求一起传递:

var googleapis = require('googleapis'),
    API_KEY = '...';

googleapis
    .discover('taskqueue', 'v1beta2')
    .execute(function(err, client) {
       var req = client.taskqueue.tasks.insert({
           project: 'my-project',
           taskqueue: 'pull-queue',
           key: API_KEY
       });
       req.execute(function(err, response) {
           ...
       });
    });

但是我收到了 401“需要登录”消息。我错过了什么?

如果我需要使用 OAuth,如果我的客户端是 NodeJS 服务器而不是可以处理 OAuth 重定向 URL 的用户/浏览器,我如何获取访问令牌?

4

1 回答 1

1

最好的方法是利用GCE 中的服务帐户。这是一个合成用户帐户,可供 GCE 项目中的任何人使用。让所有的身份验证排队可能有点棘手。这是一个关于如何在 python 中执行此操作的示例。

您需要做的一般概述:

  1. 使用任务队列 OAuth 范围启动 GCE 实例。
  2. 将 GCE 服务帐户添加到 queue.yaml 中的任务队列 ACL。
  3. 获取访问令牌。看起来您可以使用computeclient.js凭据对象来自动执行 HTTP 调用http://metadata/computeMetadata/v1beta1/instance/service-accounts/default/token
  4. 在对任务队列 API 的任何 API 调用中使用此令牌。

我不是 Node 专家,但四处搜索我发现了一个如何使用 GCE 的服务帐户从Node 连接到 Datastore API的示例。将其适应任务队列 API 应该很简单。

于 2013-10-06T22:14:13.940 回答