我正在使用C#/ .NET尝试来自Perform Google Apps Domain-wide Delegation of Authority的示例代码,就像我尝试的其他一些示例一样,创建使用auth变量的对象的代码部分表示它们的语法是错的。这是我的代码:
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);
}
}
}
我看到的错误是
(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
这是我第一次编写使用Google API的应用程序,我们将非常感谢任何帮助,让我们感激不尽!
答案 0 :(得分:3)
这个有效:
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
});