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

标签 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 获取访问 token 。我想避免自己这样做,所以我找到了 Google APIs for Go以及以下描述 how to do it for App Engine 的内容.

我已将 App Engine 应用的服务帐户电子邮件添加到 Google Analytics 以获得读取权限。

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

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

此处是 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

User应该是我在开发服务器上已经成功使用的服务账号,所以我不太明白这个问题。 App Engine 和开发服务器上的代码完全相同。

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

问题可能有什么不同?

最佳答案

可以在启动时向开发服务器提供必要的信息,例如here。 .

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

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

app_name@appspot.gserviceaccount.com

关于google-app-engine - 使用 App Engine 开发服务器向 Google API 声明身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33099412/

相关文章:

Facebook OAuth 2.0 "code"和 "token"

c# - 如何使用刷新 token 更新访问 token ?

google-app-engine - AppEngine/数据存储 : Best way to retrieve since ancestor query returns everything recursively

google-app-engine - 当 Google 数据存储区的属性值发生更改时通知用户

json - 可以将 map[string]string 编码为 json 返回错误吗?

Golang 延迟行为

java - Java 中 Google OAuth 2 进程中的状态参数

google-app-engine - 如何查询比较同一实体的两个属性的 AppEngine 数据库?

java - 为什么我无法通过 App Engine 将大于 100KByte 的文件上传到 Google Cloud Storage?

golang gin 加载 html 超时