无法在Google云端硬盘API上验证我的服务帐户

时间:2014-12-08 21:32:45

标签: c# google-drive-api

请耐心等待,这是我在StackOverflow上发布的第一个问题,因此我不确定描述问题的最佳方式是什么。 啊,我也提前为我的英语道歉。 ;)

这是简短的版本:尽管看起来我做了Google建议做的所有事情,但我仍然无法从云端硬盘上传或下载文件。 我正在使用Visual Studio和Google.Apis.Drive.v2,我试图使用服务帐户,因为它是必须上传远程文件夹中文件的Web服务器。 所有示例和示例都使用CLIENT_ID / CLIENT_SECRET机制,这就是为什么我很难理解发生了什么以及我失败的原因和方式。

这就是我所做的:

  • 我在Google Developers Console中注册了我的应用程序
  • 我授权客户ID使用
    安全部分内的 https://www.googleapis.com/auth/drive 进入我的域名。
  • 我下载了安全证书.p12,我把它放在公用文件夹中

...然后我写了这个来创建一个Drive Service对象:

public static DriveService GetDriveService(string PrivateKey, string ServiceAccountEmail, string Username, string ApplicationName)
    {
        X509Certificate2 certificate = new X509Certificate2(PrivateKey, "notasecret", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);

        ServiceAccountCredential credential = new ServiceAccountCredential(
             new ServiceAccountCredential.Initializer(ServiceAccountEmail)
             {
                Scopes = new[] { 
                DriveService.Scope.Drive, 
                DriveService.Scope.DriveAppdata,
                DriveService.Scope.DriveAppsReadonly,
                DriveService.Scope.DriveFile,
                DriveService.Scope.DriveScripts,
                DriveService.Scope.DriveReadonly,
                DriveService.Scope.DriveMetadataReadonly},
                User = Username
             }.FromCertificate(certificate));

        // Create the service.
        return new DriveService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = ApplicationName
        });
    }

...在asp.net MVC控制器中(只是为了尝试)我把它推了出来:

string PrivateKey = @"PATH/XXXXX.p12";
string ServiceAccountEmail = "thatloooooongstrangenumerseccecc@developer.gserviceaccount.com";
string Username = "XXXXXXX";
string ApplicationName = "XXXXXX";

DriveService service = ImageHelper.GetDriveService(PrivateKey, ServiceAccountEmail, Username, ApplicationName);

if (service != null)
{
    FilesResource.ListRequest request = service.Files.List();
    request.Q = "mimeType='application/vnd.google-apps.folder' and trashed=false";
    FileList files = request.Execute();
}

......但关键是我总是这样:

  

类型' Google.Apis.Auth.OAuth2.Responses.TokenResponseException'的例外情况发生在Google.Apis.dll中,但未在用户代码中处理

     

其他信息:错误:" access_denied",说明:"请求的客户未经授权。",Uri:"" **

有什么想法吗?

0 个答案:

没有答案