Google App Engine で開発中のアプリを介して、Bigquery に保存されているデータにアクセスしようとしています。ただし、リクエストを行うたびに、「許可が拒否されました」というエラーが表示されます。
プロジェクトの API チームのメンバーとしてアプリケーションを追加し (@appspot.gserviceaccount.com というアドレスを追加しました)、パッケージ code.google.com/p/google-api-go-client を介して bigquery にアクセスしています。 /bigquery/v2
次のコードは、各クエリに API キーを追加する方法です。
transport := KeyedTransport{Key: <api key>, Transport: http.DefaultTransport}
client := &http.Client{Transport: transport}
err := errors.New("reached")
b, err := bigquery.New(client)
...
query := &bigquery.QueryRequest{
DefaultDataset: <perviously defined daset>
Query: <query that looks in a single table for a single result by a unique id>,
Kind: "json",
MaxResults: 1,
...
b.Jobs.Query(ProjectID, query).Do()
KeyedTransport に対して以下が定義されています。
func (t KeyedTransport) RoundTrip(req *http.Request) (*http.Response, error){
u := *req.URL
args := u.Query()
args.Set("key", t.Key)
u.RawQuery = args.Encode()
r, err := http.NewRequest(req.Method, u.String(), newBody)
resp, err := t.Transport.RoundTrip(r)
if err != nil{
return nil, errors.New("error: "+err.Error())
}
return nil, errors.New("resp: "+toJson(resp))
}
また、API キーが Google API コンソールで生成されたものと一致することも確認しました。これはチームの別のメンバーによって生成されたもので、「ブラウザー アプリのキー (リファラー付き)」というラベルが付けられています。
これが私に大きな問題を引き起こしているのを見て、私は Oauth2 に移行します。これは、Go のドキュメントの方がはるかに優れているように思われるためですが、ユーザーに Google ログインを要求したくないいくつかの組織と協力することを検討しています.