1

以下のコードを使用して、サービス アカウントでファイルを取得しています。

        var certificate = new X509Certificate2("D:\\05-privatekey.p12", "notasecret", X509KeyStorageFlags.Exportable);
        var privateKey = certificate.Export(X509ContentType.Cert);
        var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate)
        {
            ServiceAccountId = "877564787679-glrhdp0gclc9mbj77qe4998dkc6mfj62@developer.gserviceaccount.com",
            Scope = DriveService.Scopes.Drive.GetStringValue(),
            ServiceAccountUser = "user1@05.mygbiz.com"
        };
        var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);
        DriveService service = new DriveService(new BaseClientService.Initializer()
        {
            Authenticator = auth,
            ApplicationName = "My APP",
        });

        FilesResource.ListRequest request = service.Files.List();
        FileList files = request.Execute();

ここで Execute() api は例外を与えています

ダイレクト メッセージの送信中または応答の取得中にエラーが発生しました。

編集: プロジェクトは、@ https://code.google.com/p/google-api-dotnet-client/wiki/Buildに記載されている設定に基づいています

編集 2: サービス アカウントに基づいて CPanel に適切な設定をしています

4

1 に答える 1

0

私は同じ問題を抱えていました。最終的には機能しました。いくつか間違っていました。

  1. Google Cloud Consoleに移動し、キー ファイルを再生成してダウンロードしました。API & auth->Registered Apps に移動します。
  2. providerオブジェクトに入れる唯一のプロパティは.ServiceAccountId.Scopeです。
  3. enum 値を使用せずに、実際のスコープに置き換える必要がScopeありました (VB を使用しているため、これは単なる問題です)。GetStringValue()Fusion Tables で作業していますが、VB.NET はenum 関数を使用しないため、スコープは単なる "Fusiontables" としてレンダリングされていました。今私は使用して"https://www.googleapis.com/auth/fusiontables"います。有効なスコープのリストについては、こちらを参照してください。
  4. にはServiceAccountId、「@」を含むサービス アカウント「メール アドレス:」を使用しました。(12345@developer.gserviceaccount.com) であり、コンソール (12345.apps.googleusercontent.com) で「クライアント ID:」としてラベル付けされたものではありません。

うまくいけば、これは他の人に役立ちます。

于 2013-09-10T18:29:00.227 に答える