如何在.net中使用Google OAuth2使用ServiceAccount?

时间:2013-05-01 18:30:12

标签: c# google-api google-oauth

是否有任何示例如何使用.net中的服务帐户访问Google服务API?

private const string SERVICE_ACCOUNT_EMAIL = "xxxxxxxxxxx@developer.gserviceaccount.com";
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
    });
}

返回OAuth连接失败。怎么办呢?

2 个答案:

答案 0 :(得分:2)

此案例可在我的网站上使用

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 = "*****",
        });

答案 1 :(得分:2)

  1. 创建服务帐户密钥凭证
  2. 为服务创建私钥。 (关键json)。 例如:

    {   “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. 使用此json,您必须生成一个c#类。您可以使用(http://json2csharp.com/)。这更快

  4. 使用此代码生成credencial:

    var _pathJson = @“C:\ servicekey.json”;    var json = File.ReadAllText(_pathJson);    var cr = JsonConvert.DeserializeObject(json);    //“个人”服务帐户凭证    //创建一个显式的ServiceAccountCredential凭证    var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(cr.ClientEmail)             {                 Scopes = new [] {YouTubeService.Scope.YoutubeUpload / 此处放置您要使用的范围 /}             } .FromPrivateKey(cr.PrivateKey));