前往App Engine oauth2请求

I've been trying to implement OAuth2 for Go 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.

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