.net 如何使用ServiceAccountCredential验证的电子表格服务?

.net 如何使用ServiceAccountCredential验证的电子表格服务?,.net,google-api,google-sheets,google-spreadsheet-api,google-authentication,.net,Google Api,Google Sheets,Google Spreadsheet Api,Google Authentication,我需要使用电子表格服务,但在官方文档.net中找不到方法。 我已对我的服务进行了身份验证: String serviceAccountEmail = "serviceAccount@developer.gserviceaccount.com"; var certificate = new X509Certificate2(@"privatekey.p12", "pass", X509KeyStorageFlags.Exportable); ServiceAccountCredential

我需要使用电子表格服务,但在官方文档
.net
中找不到方法。

我已对我的服务进行了身份验证:

String serviceAccountEmail = "serviceAccount@developer.gserviceaccount.com";

var certificate = new X509Certificate2(@"privatekey.p12", "pass", X509KeyStorageFlags.Exportable);

ServiceAccountCredential credential = new ServiceAccountCredential(
    new ServiceAccountCredential.Initializer(serviceAccountEmail)
    {
        Scopes = new[] { DriveService.Scope.Drive }
    }.FromCertificate(certificate));
从这里我可以实例化几乎所有的服务

例如,驱动器服务:

var service = new DriveService(new BaseClientService.Initializer()
    {
            HttpClientInitializer = credential,
            ApplicationName = "Drive API Sample",
    });
但是通过
SpreadsheetsService
我可以做到这一点,因为SpreadsheetsService在其默认构造函数中等待字符串“application name”,或者在其属性
RequestFactory
中等待GOAuth2RequestFactory


如何使用ServiceAccountCredential对电子表格服务进行身份验证?

以下是有关如何执行此操作的答案。。。。。 关键是在新的requestFactory上使用CustomHeader

 var certificate = new
 System.Security.Cryptography.X509Certificates.X509Certificate2(p12KeyFileName,
 "notasecret", X509KeyStorageFlags.Exportable);

 string SCOPE = "https://spreadsheets.google.com/feeds
 https://docs.google.com/feeds";

 Google.Apis.Auth.OAuth2.ServiceAccountCredential credential = new
 Google.Apis.Auth.OAuth2.ServiceAccountCredential(
     new ServiceAccountCredential.Initializer(serviceAccountEmail)
     {
         Scopes = new[] { SCOPE }
     }.FromCertificate(certificate));


 bool success =
 credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Result;

 var requestFactory = new Google.GData.Client.GDataRequestFactory("My
 Plastic SCM Service");
 requestFactory.CustomHeaders.Add(string.Format("Authorization: Bearer
 {0}", credential.Token.AccessToken));

 var s = new
 SpreadsheetsService("MySpreadsheetIntegration-v1"); s.RequestFactory =
 requestFactory; 
 return s;

请注意,添加自定义标题时需要:
“Authorization:Bearer{0}”通过Java,您可以使用:spreadsheetService.setHeader(“Authorization”,“Bearer”+accessToken);但对.net不太确定。。。。setHeader示例:您找到答案了吗?我正试图做同样的事情,但电子表格服务只支持将应用程序名称作为参数。你有没有什么变通办法?如果我只是一个普通用户,而不是域用户,setUserCredentials对我有效。什么是
DriveService
的命名空间和程序集?这可能会有帮助-