14

I am working in google api with asp.net c#, My goal is access google api using service account.

I have imported all needed dlls to create service account to access admin features(admin sdk).

But i couldn't find ServiceAccountCredential.

How can i implement this in my project?

chandran
  • 171
  • 1
  • 2
  • 10

3 Answers3

28

Here's how you do it in 2017:

  • Go to the Service Accounts page

  • Create a private key for the service account as a JSON file

  • Put the downloaded file in your project (for development) or bake it in your build process

  • Reference the Google.Apis.Auth package in your code

      using (var stream = new FileStream("key.json", FileMode.Open, FileAccess.Read))
      {
          var credential = GoogleCredential.FromStream(stream)
                                           .CreateScoped(scopes)
                                           .UnderlyingCredential as ServiceAccountCredential;
    
          //profit
      }
    
Ufuk Hacıoğulları
  • 37,978
  • 12
  • 114
  • 156
  • 1
    I get "Error creating credential from JSON. Unrecognized credential type ." any idea why? – Patrick Jan 27 '17 at 17:05
  • 1
    I have found a solution for the problem, but it's different from yours: http://stackoverflow.com/questions/41905074/google-analytics-embed-api-server-side-authorization-not-rendering-the-charts-wi what do you think about it? – Patrick Feb 01 '17 at 10:32
12

ServiceAccountCredential is part of Google.Apis.Auth.OAuth2

Simple example using BigQuery:

using System;
using Google.Apis.Auth.OAuth2;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Bigquery.v2;
using Google.Apis.Services;

//Install-Package Google.Apis.Bigquery.v2
namespace GoogleBigQueryServiceAccount
{
    class Program
    {

        static void Main(string[] args)
        {

            Console.WriteLine("BigQuery API - Service Account");
            Console.WriteLine("==========================");

            String serviceAccountEmail = "539621478854-imkdv94bgujcom228h3ea33kmkoefhil@developer.gserviceaccount.com";

            var certificate = new X509Certificate2(@"key.p12", "notasecret", X509KeyStorageFlags.Exportable);

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

            // Create the service.
            var service = new BigqueryService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "BigQuery API Sample",
            });


        }
    }
}
Linda Lawton - DaImTo
  • 106,405
  • 32
  • 180
  • 449
1

I am using Xamarin Studio and I have an NUnit test library project (PCL) working on my Mac using ServiceAccountCredential. I just tried to move it to an Android test project (MonoDroid), and ServiceAccountCredential does not exist. ServiceAccount does exist (its ancestral class). So this problem may be related to the compile target, and ServiceAccountCredential not being implemented for your target.

Buzzware
  • 160
  • 2
  • 7