Я пытаюсь работать с приводом Google из приложения Windows или службы.Не удается авторизовать в Google Диске, используя учетную запись службы в С # /. NET
Мне не нужно веб-приложение, 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). Я нашел команду, которая бросает это исключение:
Строка подписи = UnpaddedUrlSafeBase64Encode (Key.SignData (Encoding.ASCII.GetBytes (assertion.ToString()), "SHA256"));
Это файл Google.Apis.Authentication.OAuth2.dll, файл AssertionflowClient.cs, метод GenerateMessage.
Но сертификат Google имеет только алгоритм SHA1. Это видно из окна справки: X509Certificate2UI.DisplayCertificate (сертификат); или из окон.
Я попытался использовать SHA1: Строка подписи = UnpaddedUrlSafeBase64Encode (Key.SignData (Encoding.ASCII.GetBytes (assertion.ToString()), "SHA1"));
После этого это исключение исчезло, но у меня возникла ошибка HTTP 400 (недопустимый запрос). Помогите мне пожалуйста. Как я могу работать с диском Google с учетной записью службы?
Спасибо.
PS Извините, мой возможный плохой английский, я русский человек.
В моем случае, когда я пытаюсь извлечь файл, используя BuildService(), он не возвращает данные. Можете ли вы мне помочь в этом. –