2013-05-01 17 views
8

Czy jest jakaś próbka dostępu do interfejsu API usługi Google za pomocą konta usługi w .net?jak korzystać z Google OAuth2 przy użyciu ServiceAccount w .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 
    }); 
} 

Nie powiodło się zwrócenie połączenia OAuth. Jak to zrobić?

+0

Czy znalazłeś rozwiązanie problemu? – Moelbeck

Odpowiedz

2

Sprawa ta praca w moim miejscu

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

Mam do czynienia z dziwnym zachowaniem: za każdym razem, gdy umieszczam bezwzględną ścieżkę, zawsze otrzymuję exceptoin: "System nie może znaleźć określonego pliku. || ścieżka: C: \ www \ myproject \ App_Data \ key.p12", ty umieść ten plik w folderze App_Data i oznacz go jako "zawsze kopiuj" – ailmcm

1
  1. utworzyć usługę konta Keys credencial
  2. Utwórz klucz prywatny do służby. (Key json). Przykład:

    { "type": "service_account" "PROJECT_ID":”... " "private_key_id":" .... " "private_key":" .... ", " client_email ":" ..... @ developer.gserviceaccount.com ", " client_id ":" .... ", " auth_uri ":" ... accounts.google.com/o/ oauth2/auth ", " token_uri ":" ... accounts.google.com/o/oauth2/token ", " 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. Za pomocą tego jsona należy wygenerować klasę C#. Możesz użyć (http://json2csharp.com/). Jest szybsza

  4. pomocą tego kodu do generowania credencial:

    var _pathJson = @ "C: \ servicekey.json"; var json = File.ReadAllText (_pathJson); var cr = JsonConvert.DeserializeObject (json); // konto poświadczeń "osobisty" usługa // Utwórz wyraźny ServiceAccountCredential poświadczeń var poświadczenia = new ServiceAccountCredential (nowa ServiceAccountCredential.Initializer (cr.ClientEmail) { celownicze = new [] {YouTubeService.Scope.YoutubeUpload/Tutaj umieść zakres, który chcesz użyć: /} } .FromPrivateKey (cr.PrivateKey));

Powiązane problemy