服务帐户,App引擎,Go,Google API

时间:2015-07-03 14:14:24

标签: google-app-engine go google-api service-accounts

我尝试使用服务帐户连接到驱动器。

其实我有

        c := appengine.NewContext(r)
        key, err := ioutil.ReadFile("key/key.pem")
        if err != nil {
            w.WriteHeader(http.StatusInternalServerError)
            c.Errorf("Pem file not found")
            return
        }
        config := &jwt.Config{
            Email: "xxx@developer.gserviceaccount.com",
            PrivateKey: key,
            Scopes: []string{
                "https://www.googleapis.com/auth/drive",
            },
            TokenURL: google.JWTTokenURL,
        }

        client := config.Client(oauth2.NoContext)
        service, err := drive.New(client)
        if (err != nil) {
            w.WriteHeader(http.StatusInternalServerError)
            c.Errorf("Service connection not works")
            return
        }
        about, err := service.About.Get().Do()
        if (err != nil) {
            w.WriteHeader(http.StatusInternalServerError)
            c.Errorf(err.Error())
            return
        }
        c.Infof(about.Name)

我在这里找到:https://github.com/golang/oauth2/blob/master/google/example_test.go

当然它不起作用,我必须使用urlfetch,但我不知道如何...... 我得到的错误是"ERROR: Get https://www.googleapis.com/drive/v2/about?alt=json: oauth2: cannot fetch token: Post https://accounts.google.com/o/oauth2/token: not an App Engine context"

我该怎么做?

谢谢。

1 个答案:

答案 0 :(得分:1)

Google App Engine有两个Go套餐:appenginegoogle.golang.org/appengine

第一个使用与oauth2包使用的context.Context不兼容的appengine.Context。您需要将第二个导入google.golang.org/appengine

另外,将client := config.Client(oauth2.NoContext)更改为client := config.Client(c)