【问题标题】:Asserting identity to Google APIs with App Engine development server使用 App Engine 开发服务器向 Google API 声明身份
【发布时间】:2016-01-11 00:16:49
【问题描述】:

我有一个在 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

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

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

问题可能有什么不同?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    app_name@appspot.gserviceaccount.com
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 2012-09-29
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多