2016-07-13 5 views
1

Wie wird die oauth-2-Verbindung zu Google-Speicher in .NET mithilfe eines Google Cloud Platform-Dienstkontos und einer Schlüsseldatei hergestellt? Die verfügbaren Beispiele und die Dokumentation behandeln keine Dienstkonten und die APIs sind verwirrend und scheinen sich häufig zu ändern, wodurch die vorhandene Dokumentation in Frage gestellt wird. Ein funktionierendes Codebeispiel wäre am besten, einschließlich der signifikanten API-Namespaces und -Versionen.Google-Speicherung in .NET mit einem Google Cloud Platform-Dienstkonto und Schlüsseldatei

+0

haben Sie DotNetOpenAuth /? https://github.com/DotNetOpenAuth/DotNetOpenAuth/wiki/Security-scenarios – weismat

+0

@weismat Ich werde es mir ansehen. Momentan löse ich meine Kernaufgabe anders. Google hat keinen Anreiz, die .NET-Entwicklung zu vereinfachen. –

Antwort

1

Das Codebeispiel in Cloud Storage JSON API documentation umfasst nur die Verwendung von Anmeldeinformationen für die Standardanwendung, nachdem GOOGLE_APPLICATION_CREDENTIALS auf den heruntergeladenen JSON-Schlüssel festgelegt wurde.

Allerdings gibt es eine Probe in den documentation for the Google API Client Library for .NET für ein Dienstkonto mit einem exportierten P12 Schlüsseln, mit dem Sie den CreateStorageClient() -Methode in der Cloud Storage docs gegeben anzupassen:

public StorageService CreateStorageClient() 
{ 
    String serviceAccountEmail = "SERVICE_ACCOUNT_EMAIL_HERE"; 
    var certificate = new X509Certificate2(@"key.p12", "notasecret", X509KeyStorageFlags.Exportable); 

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

    var serviceInitializer = new BaseClientService.Initializer() 
    { 
    ApplicationName = "Storage Sample", 
    HttpClientInitializer = credential 
    }; 

    return new StorageService(serviceInitializer); 
} 

den gleichen Verfahren zur Herstellung eines JSON Schlüssel direkt auf der Grundlage des API docs mit:

public StorageService CreateStorageClient() 
{ 
    GoogleCredential credential; 
    using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) 
    { 
    credential = GoogleCredential.FromStream(stream) 
     .CreateScoped(StorageService.Scope.DevstorageFullControl); 
    } 

    var serviceInitializer = new BaseClientService.Initializer() 
    { 
    ApplicationName = "Storage Sample", 
    HttpClientInitializer = credential 
    }; 

    return new StorageService(serviceInitializer); 
} 

Beachten sie, dass ich nicht getestet dies da ich nicht zur Zeit eine .NET-Entwickler-Umgebung eingerichtet haben, aber es sollte eine allgemeine Vorstellung von dem, wie es funktioniert. Ich werde ein Update für die Cloud Storage-Dokumente anfordern, um ein Beispiel hinzuzufügen, das einen JSON-Schlüssel verwendet.

+0

Da wir eine Problemumgehung für unser zugrunde liegendes Problem entwickelt haben, kann es einige Zeit dauern, bis ich diese Lösung überprüfen kann. –