Pergunta

I am trying out the sample code from Perform Google Apps Domain-wide Delegation of Authority using C# / .NET and, like in some other samples I have tried, the part of the code that creates an object that uses the auth variable says that they syntax is wrong. Here is the code I have:

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using DotNetOpenAuth.OAuth2;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
using Google.Apis.Drive.v2;
using Google.Apis.Util;

namespace GoogleAPIDemo
{
    class DriveServiceObject
    {
        private const string SERVICE_ACCOUNT_EMAIL = "<some-id>@developer.gserviceaccount.com";
        private const string SERVICE_ACCOUNT_PKCS12_FILE_PATH = @"\path\to\<public_key_fingerprint>-privatekey.p12";

        /// <summary>
        /// Build a Drive service object authorized with the service account
        /// that acts on behalf of the given user.
        /// </summary>
        /// @param userEmail The email of the user.
        /// <returns>Drive service object.</returns>
        static DriveService BuildService(String userEmail)
        {
            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(),
                ServiceAccountUser = userEmail,
            };
            var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);

            return new DriveService(auth);
        }
    }
}

The error that I see is

(local variable) OAuth2Athenticator<AssertionFlowClient> auth

Error:
   The best overloaded method match for 'Google.Apis.DriveService.DriveService(Googel.Apis.Services.BaseClientService.Initializer)' has some invalid arguments

This is my first time writing an app that uses Google's APIs and any help getting this working would be greatly appreciated!

Foi útil?

Solução

This one works:

        var provider = new AssertionFlowClient(
            GoogleAuthenticationServer.Description,
            new X509Certificate2(privateKeyPath, keyPassword, X509KeyStorageFlags.Exportable))
        {
            ServiceAccountId = serviceAccountEmail,
            Scope = DriveService.Scopes.Drive.GetStringValue(),
            ServiceAccountUser = driveHolderAccountEmail
        };
        var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);

        m_service = new DriveService(new BaseClientService.Initializer()
        {
            Authenticator = auth
        });
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top