在哪里可以找到ServiceAccountCredential?

14

我正在使用ASP.NET C#开发Google API,我的目标是使用服务账户访问Google API。

我已经导入了所有必需的dll,以创建服务账户来访问管理功能(管理员SDK)。

但我找不到ServiceAccountCredential。

我该如何在我的项目中实现这一点?


你尝试过并得到了解决方案吗? - PreguntonCojoneroCabrón
肯定有一些文档不连贯。我也在努力弄清楚这个问题。我会尽力记得回到这里,当我搞清楚了的时候。 - MojoFilter
3个回答

28

以下是2017年的操作方法:

  • 进入服务帐户页面

  • 为服务帐户创建JSON格式的私钥文件

  • 将下载的文件放入项目中(用于开发)或在构建过程中加入

  • 在代码中引用Google.Apis.Auth

      using (var stream = new FileStream("key.json", FileMode.Open, FileAccess.Read))
      {
          var credential = GoogleCredential.FromStream(stream)
                                           .CreateScoped(scopes)
                                           .UnderlyingCredential as ServiceAccountCredential;
    
          //profit
      }
    

1
我收到了“从JSON创建凭据时出错。无法识别的凭据类型。” 你有什么想法? - Patrick
1
我已经找到了一个解决方案,但它与你的不同:https://dev59.com/bFgR5IYBdhLWcg3wAJBK 你对此有什么看法? - Patrick

12

ServiceAccountCredential是Google.Apis.Auth.OAuth2的一部分。

使用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",
            });


        }
    }
}

我意识到这是一个旧答案,但是这些部分来自哪里:new X509Certificate2(@“key.p12”,“notasecret”,X509KeyStorageFlags.Exportable); - themiDdlest
在Google开发者控制台中,您可以下载p12文件或json文件,但它们使用不同的代码。 - Linda Lawton - DaImTo

1

我正在使用Xamarin Studio,我有一个NUnit测试库项目(PCL)在我的Mac上使用ServiceAccountCredential。我刚试图将它移动到一个Android测试项目(MonoDroid)中,但是ServiceAccountCredential不存在。ServiceAccount存在(它的祖先类)。因此,这个问题可能与编译目标有关,并且ServiceAccountCredential没有为您的目标实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接