Google服务帐户

时间:2016-07-23 23:04:45

标签: google-drive-api google-api-dotnet-client service-accounts

我尝试将使用C#编写的服务器连接到我的Google云端硬盘,因此我使用Google服务帐户,我从Google API控制台配置了所有内容并拥有以下代码

    static void Main(string[] args)
    {
        string[] Scopes = { DriveService.Scope.Drive };
        var certificate = new X509Certificate2("client_secret.p12", "notasecret", X509KeyStorageFlags.Exportable);
        try
        {
            ServiceAccountCredential credential = new ServiceAccountCredential(
                new ServiceAccountCredential.Initializer("sp-update@salmon-player-update.iam.gserviceaccount.com")
                {
                    Scopes = Scopes
                }.FromCertificate(certificate));
            DriveService service = new DriveService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Salmon Player Update"
            });
            FilesResource.ListRequest listRequest = service.Files.List();
            listRequest.PageSize = 10;
            listRequest.Fields = "nextPageToken, files(id, name)";

            // List files.
            IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute()
                .Files;
            Console.WriteLine("Files:");
            if (files != null && files.Count > 0)
            {
                foreach (var file in files)
                {
                    Console.WriteLine("{0} ({1})", file.Name, file.Id);
                }
            }
            else
            {
                Console.WriteLine("No files found.");
            }
            Console.Read();
        } catch(Exception ex)
        {
            Console.WriteLine(ex.InnerException);
        }
    }

但无论我做什么,我只能获得#34;入门&#34;那里不存在的文件。我有很多不同的文件,我无法访问。 任何想法在这里可能是错的?

1 个答案:

答案 0 :(得分:3)

服务帐户是其自己的用户,因此它将拥有自己的云端硬盘帐户空间。如果您想访问个人帐户中的文件,则必须a)与服务帐户的电子邮件地址共享这些文件,或b)使用OAuth流程并使用您自己的用户而不是机器人服务帐户进行身份验证。