我試圖從Windows應用程序或服務使用Google驅動器。無法在Google驅動器中使用服務帳戶進行授權С#/。NET
我不需要Web應用程序,MVC等等。
系統必須自動工作,沒有任何用戶入侵,所以我創建了服務帳戶,並獲得證書和電子郵件。
,當然,下載的最後一個客戶端庫 - http://code.google.com/p/google-api-dotnet-client/
我建立服務對象作爲文檔:
private const string SERVICE_ACCOUNT_EMAIL = "[email protected]";
private const string SERVICE_ACCOUNT_PKCS12_FILE_PATH = @"xxx-privatekey.p12";
/// <summary>
/// Build a Drive service object authorized with the service account.
/// </summary>
/// <returns>Drive service object.</returns>
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 (),
ServiceAccountUser = "[email protected]",
};
var auth = new OAuth2Authenticator<AssertionFlowClient> (provider, AssertionFlowClient.GetState);
return new DriveService (auth);
} // BuildService
,然後我這樣做:
service = BuildService ();
FilesResource.InsertMediaUpload request = service.Files.Insert (body, stream, mimeType);
request.Upload ();
File file = request.ResponseBody;
我上傳方法中的例外 - 未知對象標識符(OID)。 我找到了引發此異常的命令:
String signature = UnpaddedUrlSafeBase64Encode(Key.SignData(Encoding.ASCII.GetBytes(assertion.ToString()),「SHA256」));
這在一個Google.Apis.Authentication.OAuth2.dll,文件AssertionflowClient.cs中,方法GenerateMessage。
但Google證書只有SHA1算法。這從證書信息窗口中是顯而易見的:X509Certificate2UI.DisplayCertificate(certificate);或從窗口。我試過使用SHA1: String signature = UnpaddedUrlSafeBase64Encode(Key.SignData(Encoding.ASCII.GetBytes(assertion.ToString()),「SHA1」));
之後,此異常消失,但我得到HTTP錯誤400(無效的請求)。 請幫助我。如何使用服務帳戶與Google驅動器配合使用?
謝謝。
PS 對不起,我可能不好英語,我是俄羅斯人。
在我的情況下,當我嘗試使用BuildService()獲取文件時,它不返回任何數據。請幫助我。 – 2013-07-21 18:17:55