去App引擎oauth2请求

时间:2014-10-30 20:34:06

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

我一直在尝试使用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文件和其他内容一样有效

Google搜索引导我了解最好使用 urlfetch ,但我无法弄清楚如何使用oauth2配置进行设置。

1 个答案:

答案 0 :(得分:0)

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。看看如何设置AppEngineConfighttps://github.com/golang/oauth2/blob/master/google/appengine.go