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并重新生成并下载了我的密钥文件。转到 APIs & auth->Registered Apps。
  2. 我放在provider对象中的唯一属性是.ServiceAccountIdand .Scope
  3. 我不得不Scope用实际范围替换而不使用枚举值(这只是一个问题,因为我使用的是 VB)。我在 Fusion Tables 中工作,并且范围仅呈现为“Fusiontables”,因为 VB.NET 不使用GetStringValue()enum 函数。现在我正在使用"https://www.googleapis.com/auth/fusiontables". 转到此处以获取有效范围的列表。
  4. 对于ServiceAccountId,我使用了服务帐户“电子邮件地址:”,其中包含“@”。(12345@developer.gserviceaccount.com),而不是他们在控制台 (12345.apps.googleusercontent.com) 中标记为“客户端 ID:”的那个。

希望这对其他人有帮助。

于 2013-09-10T18:29:00.227 回答