2013-05-01 3 views
8

Existe-t-il un exemple d'accès à une API de service google à l'aide du compte de service dans .net?comment utiliser Google OAuth2 en utilisant ServiceAccount dans .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 
    }); 
} 

Cela ne réussit pas à renvoyer une connexion OAuth. Comment cela peut-il être fait?

+0

Avez-vous trouvé une solution? – Moelbeck

Répondre

2

Ce travail cas dans mon site

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

Je suis confronté à un comportement étrange: chaque fois que je mets même un chemin absolu, je reçois toujours l'exception: "Le système ne trouve pas le fichier spécifié. || chemin: C: \ www \ monprojet \ App_Data \ key.p12", tu placer ce fichier dans le dossier App_Data et le marquer comme 'toujours copier' – ailmcm

1
  1. Créer un compte de service clés Crédencial
  2. Créer une clé privée pour le service. (Clé json). Exemple:

    { "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. Avec ce fichier json, vous devez générer une classe C#. Vous pouvez utiliser (http://json2csharp.com/). C'est plus rapide

  4. Utilisez ce code pour générer credencial:

    var _pathJson = @ "C: \ servicekey.json"; var json = Fichier.ReadAllText (_pathJson); var cr = JsonConvert.DeserializeObject (json); // compte de service des titres de compétences "personnel" // Créer un explicite ServiceAccountCredential var informations d'identification des titres de compétence = new ServiceAccountCredential (nouvelle ServiceAccountCredential.Initializer (cr.ClientEmail) { Scopes = new [] {YouTubeService.Scope.YoutubeUpload/ici mettre la portée que vous voulez utiliser /} } .FromPrivateKey (cr.PrivateKey));

Questions connexes