使用NodeJS客户端验证Google Pull任务队列

时间:2013-10-06 07:39:36

标签: node.js google-app-engine google-compute-engine google-tasks-api

我在App Engine上运行了一个Pull Task Queue。我试图从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的用户/浏览器,我如何获得访问令牌?

1 个答案:

答案 0 :(得分:1)

这样做的最佳方法是利用Service Accounts in GCE。这是一个合成用户帐户,可供GCE项目中的任何人使用。让所有的auth排队可能有点棘手。关于如何在python中执行此操作,这里是an example

您需要做的总体概述:

  1. 使用任务队列OAuth范围启动GCE实例。
  2. 将GCE服务帐户添加到queue.yaml中的任务队列ACL。
  3. 获取访问令牌。看起来您可以使用computeclient.js凭据对象自动将HTTP调用转移到http://metadata/computeMetadata/v1beta1/instance/service-accounts/default/token
  4. 在对任务队列API的任何API调用中使用此标记。
  5. 我不是Node专家,但我在周围搜索时发现了一个如何connect to the Datastore API from Node使用GCE服务帐户的例子。应该将其适应任务队列API应该很简单。