6

Ich muss SpreadsheetsService verwenden, aber ich finde den Weg nicht in der offiziellen Dokumentation .net. https://developers.google.com/google-apps/spreadsheets/?hl=ja#authorizing_requestsWie SpreadsheetsService verwenden, das von ServiceAccountCredential authentifiziert wird?

Ich habe meinen Dienst authentifiziert:

String serviceAccountEmail = "[email protected]"; 

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

ServiceAccountCredential credential = new ServiceAccountCredential(
    new ServiceAccountCredential.Initializer(serviceAccountEmail) 
    { 
     Scopes = new[] { DriveService.Scope.Drive } 
    }.FromCertificate(certificate)); 

Von hier aus habe ich fast jeden Service instanziieren kann.

Zum Beispiel Drive Service:

var service = new DriveService(new BaseClientService.Initializer() 
    { 
      HttpClientInitializer = credential, 
      ApplicationName = "Drive API Sample", 
    }); 

Aber mit SpreadsheetsService Ich kann dies tun, weil SpreadsheetsService für einen String 'Anwendungsnamen' wartet in seinem Standardkonstruktors oder einen GOAuth2RequestFactory in seiner Eigenschaft RequestFactory.

Wie authentifizieren Sie SpreadsheetsService mit einem ServiceAccountCredential?

+1

Mit Java können Sie ca n Verwendung: tablesheetService.setHeader ("Authorization", "Bearer" + accessToken); Aber nicht sicher über .net .... setHeader Beispiel: http://stackoverflow.com/questions/15084133/issue-with-oauth2-authentication-with-google-spreadsheet/15152682#15152682 – eddyparkinson

+0

Haben Sie die Antwort gefunden? Ich versuche das Gleiche zu tun, aber SpreadsheetsService unterstützt nur den Anwendungsnamen als Parameter. Gibt es eine Problemumgehung, die Sie verwendet haben? setUserCredentials funktioniert für mich, wenn ich nur ein normaler Benutzer bin, kein Domänenbenutzer. – Sergei

+0

Was ist _namespace und assembly_ für 'DriveService'? –

Antwort

5

Hier ist die Antwort, wie dies zu tun ..... Der Schlüssel ist die Custom auf einem neuen requestFactory

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; 
0

Hinweis zu verwenden, dass, wenn der Header benutzerdefinierte Hinzufügen Sie benötigen: „Authorization : Bearer {0} "< - mit einem Leerzeichen zwischen" Bearer "und" {0} " Da: " Authorization: Bearer {0} "< - kein Leerzeichen erhalten Sie nur eine" unbekannte Autorisierung Header " Fehler 401 Antwort

Verwandte Themen