【问题标题】:Go App engine oauth2 requestGo App 引擎 oauth2 请求
【发布时间】:2014-12-27 01:39:32
【问题描述】:

我一直在尝试使用 App 引擎服务器到服务器请求来实现 OAuth2 for Go

这里是代码(按照例子):

oauthConf, err := google.NewServiceAccountJSONConfig(
    "./key.json",
    "https://www.googleapis.com/auth/adsense.readonly",
)
if err != nil {
    log.Fatal(err)
}

client := http.Client{Transport: oauthConf.NewTransport()}
resp, err := client.Get(urlStr)
...

我收到错误消息:

http.DefaultTransport 和 http.DefaultClient 在 App Engine 中不可用。

我很确定 json.key 文件与其他文件一样有效

谷歌搜索让我了解到最好使用 urlfetch,但我不知道如何使用 oauth2 配置进行设置。

【问题讨论】:

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


    【解决方案1】:

    NewServiceAccountJSONConfig 返回一个oauth2.JWTConfig https://github.com/golang/oauth2/blob/master/google/google.go#L69-L87

    您使用的是.NewTransport()
    https://github.com/golang/oauth2/blob/master/jwt.go#L86-L88

    默认为http.DefaultTransport,appengine 不支持:
    https://github.com/golang/oauth2/blob/master/jwt.go#L163-L168

    我会改用AppEnigneConfig(如果可能的话)。见http://godoc.org/github.com/golang/oauth2/google

    c := appengine.NewContext(nil)
    config := google.NewAppEngineConfig(c, "https://www.googleapis.com/auth/bigquery")
    // The following client will be authorized by the App Engine
    // app's service account for the provided scopes.
    client := http.Client{Transport: config.NewTransport()}
    client.Get("...")
    

    否则,如果您需要使用ServiceAccountJSONConfig,您可能可以,但您需要使用urlfetch ClientTransport。看看AppEngineConfig是怎么设置的:https://github.com/golang/oauth2/blob/master/google/appengine.go

    【讨论】:

    • 我看不到在哪里可以插入 oauth2 的 key.json(或替代客户端凭据 + 私钥)
    • @MrKlint 否,在 appengine 中使用 google 服务帐户,因此它将使用 appengine 项目的凭据。如果您需要使用其他凭据,则必须自己动手。查看github.com/golang/oauth2/blob/master/google/appengine.go 了解传输和客户端的设置方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多