Ho provato a creare un DriveService utilizzando l'account di servizio che agisce per conto di un altro utente.AssertionFlowClient depreceated, cercando di utilizzare ServiceAccountCredential, ma non funzionerà
Ho copiato il codice dalla documentazione Google ha trovato qui https://developers.google.com/drive/delegation
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(auth);
}
ma ottengo questo avvertimento quando si cerca di costruire il progetto:
Attenzione 4 'Google.Apis.Authentication.OAuth2. DotNetOpenAuth.AssertionFlowClient 'è obsoleto:' AssertionFlowClient non è più supportato e verrà rimosso in 1.7.0-beta. Prendi in considerazione l'utilizzo di ServiceAccountCredential dal nuovo pacchetto Google.Apis.Auth NuGet. "
e ho anche ottenere questo errore:
Errore 11 Argomento 1: non può convertire da 'Google.Apis.Authentication.OAuth2.OAuth2Authenticator' a 'Google.Apis.Services.BaseClientService.Initializer'
poi ho googled ServiceAccountCredential e finito con questo codice (derivato da questa pagina: https://code.google.com/p/google-api-dotnet-client/wiki/OAuth2#Service_Accounts)
static DriveService BuildService() {
X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(SERVICE_ACCOUNT_EMAIL)
{
User = "[email protected]",
Scopes = new[] { DriveService.Scope.DriveFile }
}.FromCertificate(certificate));
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Drive API Sample",
});
return service;
}
quando provo a costruire questo codice sembra tutto bene, ma quando l'eseguo ottengo il seguente errore.
Una prima eccezione di possibilità di tipo 'System.Security.Cryptography.CryptographicException' in mscorlib.dll
Ulteriori informazioni: Det går inte att hitta det begärda objektet. (Tradotto: l'oggetto richiesto non può essere trovato)
Se esiste un gestore per questa eccezione, il programma può essere continuato in modo sicuro.
l'errore si verifica su questa linea:
X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable);
Qualcuno ha qualche idea?
Aggiornamento 2013 31 ottobre ho provato questo codice:
{
Console.WriteLine("Drive API - Service Account");
Console.WriteLine("==========================");
String serviceAccountEmail = "<some email>@developer.gserviceaccount.com";
var certificate = new X509Certificate2(@"key.p12", "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
User = "<someuser>@<mydomain>.mygbiz.com",
Scopes = new[] { DriveService.Scope.Drive }
}.FromCertificate(certificate));
// Create the service.
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "DrvMgr",
});
Console.WriteLine("Executing listing");
FileList UserFiles = service.Files.List().Execute();
ottengo questo messaggio di errore:
un'eccezione non gestita di tipo 'Google.Apis.Auth.OAuth2.Responses.TokenResponseException' si è verificato in Google.Apis.dll
Ulteriori informazioni: Errore: "ACCESS_DENIED", Descrizione: "", Uri: ""
Siamo spiacenti, ma no! Il percorso è controllato e tutto oki (l'ho messo in C: \ temp \ key.p12) E quando cambio la linea a: certificato X509Certificate2 = nuovo X509Certificate2 (@ "C: \ temp \ key.p12", "notasecret", X509KeyStorageFlags.Exportable); si verifica lo stesso errore: Se modifico il percorso ad esempio @ "C: \ tamp \ key.p12" Ricevo un altro messaggio di errore che dice: Una prima eccezione di tipo "System.Security.Cryptography.CryptographicException" si è verificata in mscorlib.dll Ulteriori informazioni: Det går inte att hitta sökvägen. (tradotto: "Impossibile trovare il percorso") – JoBe
Non riesco ancora a farlo funzionare. Potrebbe essere una sorta di disallineamento della versione? Inoltre, il link che hai fornito nella tua risposta utilizza AssertionFlowClient, ma come ho accennato nella mia domanda ottengo un avviso di build che non è più supportato. Mi sto perdendo qualcosa? – JoBe
Siamo spiacenti, prova questo link: https://code.google.com/p/google-api-dotnet-client/source/browse/Plus.ServiceAccount/?repo=samples. Puoi seguire il file README e verificare che questo esempio funzioni come previsto? E .. solo per verificare: hai copiato il file scaricato dalla Console dell'API di Google in questa posizione (C: \ Temp \ key.p12)? – peleyal