7

サービス アカウントで Google Cloud Storage API にアクセスしようとすると、invalid_grant エラーが発生します。次のコードの何が問題なのかわかりません。何か案が ?これは、Google Storage API を使用する初めてのアプリケーションです。どんな助けでも大歓迎です。

ソースコード

public static void main(String[] args) throws Exception {
    HttpTransport httpTransport = new NetHttpTransport();
    JsonFactory jsonFactory = new JacksonFactory();

    List<String> scopes = new ArrayList<String>();
    scopes.add(StorageScopes.DEVSTORAGE_FULL_CONTROL);

    Credential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountId("XXXX")
            .setServiceAccountPrivateKeyFromP12File(new File("key.p12"))
            .setServiceAccountScopes(scopes).build();

    Storage storage = new Storage.Builder(httpTransport, jsonFactory,
            credential).setApplicationName("test")
            .build();

    List<String> list = new ArrayList<String>();
    List<Bucket> buckets = storage.buckets().list("XXXX").execute().getItems();
    if(buckets != null) {
        for(Bucket b : buckets) {
            list.add(b.getName());
        }
    }
}

エラーとスタック トレース

Exception in thread "main" com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
  "error" : "invalid_grant"
}

at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:269)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:858)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
at GoogleStorageFetcher.main(GoogleStorageFetcher.java:143)
4

2 に答える 2

23

このエラーは、サービス アカウント ID が正しくないことが原因でした。メール アドレス (@developer.gserviceaccount.com で終わる) の代わりにクライアント ID (.apps.googleusercontent.com で終わる) を使用していました。メールアドレスは問題ありません。

于 2013-08-29T20:06:18.970 に答える
12

この質問は1年前のものです。

次のエラーが発生しました: Error:"invalid_grant", Description:"", Uri:""

私の場合、サーバークロックをNTPと同期させることで問題は解決しました。サーバーのファイアウォールがポートをブロックしていて、サーバーの時刻が正しく更新されませんでした。

詳細については、「Management API - Authorization」ヘルプ ページの「Invalid Grant」セクションを参照してください (Google アナリティクスに関連していますが、エラーに関連しています)。

于 2014-06-04T17:32:06.303 に答える