英文:
Go App engine oauth2 request
问题
我一直在尝试在App Engine服务器上使用Go实现OAuth2。以下是代码(按照示例):
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)
...
然后我收到了错误消息:
在App Engine中无法使用http.DefaultTransport和http.DefaultClient。
我很确定json.key文件是有效的,其他方面也没问题。
通过谷歌搜索,我了解到最好使用urlfetch,但我无法弄清楚如何设置oauth2配置。
英文:
I've been trying to implement [OAuth2 for Go][1] with App engine server to server request.
Here is the code (following the example):
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)
...
And I get the error message:
> http.DefaultTransport and http.DefaultClient are not available in App Engine.
I'm pretty sure the json.key file is valid as for the other stuff
Googling lead me to understand that it is preferred to use urlfetch, but I can't figure out how to make the setup with the oauth2 config.
[1]: https://github.com/golang/oauth2 "OAuth2 for Go"
答案1
得分: 0
NewServiceAccountJSONConfig
返回一个 oauth2.JWTConfig
对象。你正在使用它的 .NewTransport()
方法。默认情况下,它使用 http.DefaultTransport
,但在 appengine 上不支持。如果可能的话,我建议你使用 AppEngineConfig
。具体用法可以参考 http://godoc.org/github.com/golang/oauth2/google。
以下是使用 AppEngineConfig
的示例代码:
c := appengine.NewContext(nil)
config := google.NewAppEngineConfig(c, "https://www.googleapis.com/auth/bigquery")
// 下面的 client 将会使用 App Engine 应用的服务账号来授权访问指定的范围。
client := http.Client{Transport: config.NewTransport()}
client.Get("...")
如果你必须使用 ServiceAccountJSONConfig
,也是可以的,但你需要使用 urlfetch
的 Client
和 Transport
。可以参考一下 AppEngineConfig
的设置方式:https://github.com/golang/oauth2/blob/master/google/appengine.go。
英文:
The NewServiceAccountJSONConfig
returns a oauth2.JWTConfig
https://github.com/golang/oauth2/blob/master/google/google.go#L69-L87
Its .NewTransport()
you are using:
https://github.com/golang/oauth2/blob/master/jwt.go#L86-L88
Defaults to the http.DefaultTransport
, that is not supported on appengine:
https://github.com/golang/oauth2/blob/master/jwt.go#L163-L168
I would go for using the AppEnigneConfig
instead (if possible). See 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("...")
Otherwise if you need to use ServiceAccountJSONConfig
, you probably can, but you'll need to use urlfetch
Client
and Transport
. Have a look how AppEngineConfig
is set up: https://github.com/golang/oauth2/blob/master/google/appengine.go
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论