2013-05-01 5 views
8

Gibt es ein Beispiel für den Zugriff auf eine Google-Dienst-API mit Dienstkonto in .net?Wie verwende Google OAuth2 mit ServiceAccount in .net?

private const string SERVICE_ACCOUNT_EMAIL = "[email protected]"; 
private const string SERVICE_ACCOUNT_PKCS12_FILE_PATH = @"\path\test-privatekey.p12"; 

static DriveService BuildService() 
{ 
    X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", 
    X509KeyStorageFlags.Exportable); 

    var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate) 
    { 
     ServiceAccountId = SERVICE_ACCOUNT_EMAIL, 
     Scope = DriveService.Scopes.Drive.GetStringValue(), 
    }; 
    var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); 

    return new DriveService((new BaseClientService.Initializer() 
    { 
     Authenticator = auth 
    }); 
} 

Das Zurücksetzen einer OAuth-Verbindung ist nicht erfolgreich. Wie kann das gemacht werden?

+0

Haben Sie eine Lösung dafür gefunden? – Moelbeck

Antwort

2

Dieser Fall Arbeit in meiner Website

var certificate = new X509Certificate2("pathTo***.p12", "notasecret", X509KeyStorageFlags.Exportable); 
     var serviceAccountEmail = "********-*********@developer.gserviceaccount.com"; 
     var userAccountEmail = "******@gmail.com"; 
     ServiceAccountCredential credential = new ServiceAccountCredential(
        new ServiceAccountCredential.Initializer(serviceAccountEmail) 
        { 
         Scopes = new[] { DriveService.Scope.Drive }, 
         User = userAccountEmail 

        }.FromCertificate(certificate)); 

     // Create the service. 
     var service = new DriveService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = "*****", 
     }); 
+0

Ich habe mit seltsamen Verhalten konfrontiert: Wann immer ich auch absoluten Pfad, bekomme ich immer exceptoin: "Das System kann die angegebene Datei nicht finden. || Pfad: C: \ www \ myproject \ App_Data \ key.p12", thou ich Lege diese Datei in den App_Data Ordner und markiere sie als 'immer kopieren' – ailmcm

1
  1. Erstellen eines Dienstkontos Keys credencial
  2. privaten Schlüssel für den Dienst erstellen. (Schlüssel json). Beispiel:

    { "type": "service_account", "project_id":“... " "private_key_id":" .... " "private_key":" .... ", " client_email ":" ..... @ developer.gserviceaccount.com ", " client_id ":" .... ", " auth_uri ":" ... accounts.google.com/o/ "auth_provider_x509_cert_url": "... www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "... www.googleapis.com/robot/v1/metadata/x509/....-compute%40developer.gserviceaccount.com" }

  3. Mit diesem JSON müssen Sie eine C# -Klasse generieren. Sie können verwenden (http://json2csharp.com/). Dies ist schneller

  4. Verwenden Sie diesen Code zu generieren credencial:

    var _pathJson = @ "C: \ servicekey.json"; var json = Datei.ReadAllText (_pathJson); var cr = JsonConvert.DeserializeObject (json); // "persönliches" Dienstkonto Credential // Ein explizites ServiceAccountCredential Credential var Credential = new ServiceAccountCredential (neu ServiceAccountCredential.Initializer (cr.ClientEmail) { Scopes = new [] {YouTubeService.Scope.YoutubeUpload/Hier Legen Sie den Bereich fest, den Sie verwenden möchten /} } .FromPrivateKey (cr.PrivateKey));

Verwandte Themen