0

Я пытаюсь работать с приводом 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 Извините, мой возможный плохой английский, я русский человек.

ответ

0

Вы выполнили инструкции на странице OAuth2 service account и создали новый ключ?

Можете ли вы попробовать другие сервисные запросы, скажем, запрос на вставку без загрузки мультимедиа (InsertRequest Insert (Google.Apis.Drive.v1.Data.File body) - и дайте мне знать, если другие методы не сработали для вас, как хорошо

и заметьте, что в service account documentation он говорит:.. «Учетные записи служб полагаться на алгоритм SHA256 RSA и лексемы формате JWT» это поддерживается алгоритм, а не SHA1

+0

В моем случае, когда я пытаюсь извлечь файл, используя BuildService(), он не возвращает данные. Можете ли вы мне помочь в этом. –

1

в вашем коде удалить

.
ServiceAccountUser = "[email protected]", 

или Перейдите в консоль администратора домена Google Apps и авторизуйте свою учетную запись службы.

Тогда это работает.

+0

В моем случае, когда я пытаюсь извлечь файл, используя BuildService(), он не возвращает данные. Можете ли вы мне помочь в этом. –

+0

Связаны ли эти файлы с учетной записью службы? Этот механизм учетной записи службы предназначен главным образом для корпоративных приложений Google. Если вы используете эти API на своем личном диске, вам, возможно, придется публично делиться этими файлами с учетной записью службы. –

 Смежные вопросы

  • Нет связанных вопросов^_^