1

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 ログインを要求したくないいくつかの組織と協力することを検討しています.

4

1 に答える 1

0

私はGoの専門家ではありませんが、サービスアカウントを使用するOAuth2.0フローを介してBigQueryAPIにアクセスするためにアプリケーションを承認する必要があるようです。App EngineのPythonおよびJavaランタイムは、AppAssertionCredentialsクラスを使用した「AppEngineサービスアカウント」をサポートしています。

ただし、 Googleデベロッパーコンソールから生成されたJWTファイルを使用してサーバー間を有効にすることもできます。

JWTファイルを処理できるgo-langライブラリを介してサーバー間OAuthを使用してGAEGoランタイムからBigQueryへのアクセスを承認できる場合があります(おそらくこのように)。

于 2012-07-23T01:55:06.380 に答える