I need to use SpreadsheetsService, but I don't find the way in the official documentation .net
.
https://developers.google.com/google-apps/spreadsheets/?hl=ja#authorizing_requests
I have my service authenticated:
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));
From here I can instantiate almost any service.
For example Drive Service:
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Drive API Sample",
});
But with SpreadsheetsService
I can do this, because SpreadsheetsService wait for an string 'application name' in his default constructor or an GOAuth2RequestFactory in his property RequestFactory
.
How to authenticate SpreadsheetsService with an ServiceAccountCredential?
Here is the answer on how to do this..... The key is to use the customHeaders on a new requestFactory
Note that when adding the custom header you need: "Authorization: Bearer {0}" <-- with a space between "Bearer" and "{0}" Because: "Authorization: Bearer{0}" <-- no space will only get you an "unknown authorization header" Error 401 response