使用App Engine开发服务器向Google API声明身份

时间:2015-10-13 09:47:18

标签: google-app-engine go oauth-2.0 google-api google-analytics-api

我在App Engine上运行了Golang应用,我想调用Analytics API来处理一些指标。 App Engine和开发服务器上都有。

This page describes the overall procedure使用服务帐户进行服务器到服务器通信并使用OAuth2获取访问令牌。我想避免自己这样做,所以我找到Google APIs for Go以及描述how to do it for App Engine的以下内容。

我已将App Engine应用程序的服务帐户电子邮件添加到Google Analytics以供读取访问。

我使用Query Explorer进行了查询,效果很好。我甚至使用了来自此处的API查询URI,其中包含正确的访问令牌,并且工作正常。这适用于cURL或通过App Engine上的urlfetch调用它。

我需要的是在App Engine上以及使用开发服务器时自动获取访问令牌。

这里是一个URL缩短器的示例,已经过修改以使用Analytics API。

    client := http.Client{
            Transport: &oauth2.Transport{
                    Source: google.AppEngineTokenSource(c, analytics.AnalyticsScope),
                    Base: &urlfetch.Transport{Context: c},
            },
    }
    svc, err := analytics.New(&client)
    if err != nil {
            return nil, err
    }

    data, err := svc.Data.Ga.Get("...")

开发服务器中的响应是 401 Invalid Credentials,authError。

这应该是这样的,还是我错过了什么?

更新

所以,问题已经解决了一半。当我传入服务帐户的电子邮件和.pem文件时,它现在可以正常使用开发服务器。但是,App Engine中的同一个服务帐户无法使用上述代码!

googleapi: Error 403: User does not have any Google Analytics account., insufficientPermissions

用户应该是我已经在开发服务器上成功使用的服务帐户,因此我不太了解这个问题。它与App Engine和开发服务器上的代码完全相同。

Google Analytics设置为具有读取权限,我使用只读API。它已经在开发服务器上工作,所以应该没问题。

问题可能有什么不同?

1 个答案:

答案 0 :(得分:1)

可以在开始时为开发服务器提供必要的信息,如here

$ dev_appserver.py --appidentity_email_address email --appidentity_private_key_path file.pem

对于App Engine,您不需要使用此服务帐户,而是使用应用程序名称的服务帐户:

app_name@appspot.gserviceaccount.com