2017-12-21 27 views
0

Google Cloud Vision APIへのAPI呼び出しを、GolangのAPIキーを使用して実行しようとしています。しかし、私は400: bad request, invalid_grant errorを得ています。Google CloudクライアントライブラリでAPIキーベースのREST呼び出しを行う方法

以下のコードのapiKey/apiKeyOption部分は私のものです。

この呼び出しを行う正しい方法は何ですか。まったく可能ですか?

import (
    // ... 
    "google.golang.org/api/option" 
    vision "cloud.google.com/go/vision/apiv1" 
    "golang.org/x/net/context" 
) 

func getImageLabels(filename string) []string { 

    ctx := context.Background() 

    apiKey := "..." // I have a valid api key generated in the console. 
    apiKeyOption := option.WithAPIKey(apiKey) 

    client, err := vision.NewImageAnnotatorClient(ctx, apiKeyOption) 

    // ... 
    labels, err := client.DetectLabels(ctx, image, nil, 10) 

} 

...

Failed to detect labels: rpc error: code = Internal desc = transport: oauth2: cannot fetch token: 400 Bad Request 
Response: { 
    "error" : "invalid_grant" 
} 
+0

は、私は今、通常のREST呼び出しとしてクライアントライブラリなしでこれを実装しました。しかし、それがクライアントライブラリで可能かどうかを知ることはまだ興味があります。 – sathishvj

答えて

4

私はGolangのためのGoogle Cloudクライアントライブラリの(両方GitHubGolang documentation中)公式ドキュメントで見つけたものによると、現在サポートされている認証方法は、Googleのですアプリケーションのデフォルトの資格情報およびサービスアカウントです。そのため、APIキーを使用して認証するオプションはありません。

しかし、in the documentationと指摘されているように、セキュリティ上の理由からAPIキーの代わりにサービスアカウントを使用することをお勧めします。可能であれば、そのオプションを使用することをおすすめします。

認証を必要としないGoogle APIを呼び出すとき、およびGoogle Cloud Endpointsを使用するときにAPIキーを使用できます。 のセキュリティ上の理由から、の代わりにサービスアカウントを使用することをおすすめします。

0

@dsestoが正しいので、サービスアカウントを使用して認証するのが常に良い方法です。ただし、APIキーを使用する場合は、それが機能するはずです。

エラーを説明するライブラリにgithub issueを開いています。

適切にカール作品を使用して同じ要求(無資格情報):

curl https://vision.googleapis.com/v1/images:annotate?key=<API_KEY> -H'content-type:application/json' -d'{ 
"requests": [ 
    { 
    "image": { 
    "source": { 
    "imageUri": "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1200px-Google_2015_logo.svg.png" 
    } 
    }, 
    "features": [ 
    { 
    "type": "LABEL_DETECTION" 
    } 
    ] 
    } 
] 
}' 
関連する問題