【问题标题】:How do I use a client ID for OAuth2 on App Engine in Go?如何在 Go 中的 App Engine 上为 OAuth2 使用客户端 ID?
【发布时间】:2013-04-22 11:30:44
【问题描述】:

我在 AppEngine 中运行了一些相当简单的 Go 代码,它们应该使用 OAuth2 从用户帐户中获取文件列表。似乎可以初始化服务,但是当它尝试获取文件列表时,出现此错误: OAuthError:往返:未提供令牌

package foo

import (
    "appengine"
    "appengine/urlfetch"
    "code.google.com/p/goauth2/oauth"
    "code.google.com/p/google-api-go-client/drive/v2"
    "fmt"
    "net/http"
)

var config = &oauth.Config{
    ClientId:     "(redacted).apps.googleusercontent.com",
    ClientSecret: "REDACTED",
    Scope:        "https://www.googleapis.com/auth/drive",
    AuthURL:      "https://accounts.google.com/o/oauth2/auth",
    TokenURL:     "https://accounts.google.com/o/oauth2/token",
}

func init() {
    http.HandleFunc("/", home)
}

func home(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    transport := &oauth.Transport{
        Config:    config,
        Transport: &urlfetch.Transport{Context: c}}
    svc, err := drive.New(transport.Client())
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    q := svc.Files.List()
    _, err = q.Do()
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    fmt.Fprintf(w, "Success!")
}

我无法弄清楚我在这里做错了什么。任何帮助将不胜感激。

【问题讨论】:

    标签: google-app-engine go google-oauth google-api-go-client


    【解决方案1】:

    这个页面有点旧,但它用 Go 代码很好地概述了这些步骤。 http://golangtutorials.blogspot.com/2011/11/oauth2-3-legged-authorization-in-go-web.html

    【讨论】:

      【解决方案2】:

      token配置不够;您首先必须通过以下步骤获取有效的访问令牌:

      1. 将用户重定向到AuthCodeURL 返回的页面。将向用户显示您的应用程序的名称和请求的权限。

      2. 如果用户授予权限,他们将被重定向到您在配置中提供的RedirectURL。该 URL 将包含一个名为 code 的查询参数。

      3. 检索code 参数并将其传递给Exchange。如果一切顺利,现在应该可以正确验证请求了。

      【讨论】:

      • 不应该将大部分内容抽象到像code.google.com/p/google-api-go-client/source/browse/oauth2/v2/… 这样的库中,而不是强迫每个开发人员编写相同的样板代码...?
      • 您链接到的库提供对 Google API 的访问,以查询有关用户或所用令牌的信息。此外,oauth 库已经很舒服了,因为重定向到身份验证 URL 的方式因应用程序而异。
      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      相关资源
      最近更新 更多