Изменение файла Google Диска в C # приводит к 403 - PullRequest
1 голос
/ 05 апреля 2019

Я установил приложение C #, которое в настоящее время успешно связывается с Google Drive, выводит список файлов, загружает файлы и читает их содержимое. Пока все отлично, но теперь мне нужно иметь возможность изменять файлы, и я обнаружил, что по какой-то причине этого просто не происходит. Я считаю, что я использую правильную область, когда я аутентифицируюсь и проверил многочисленные комбинации безрезультатно. Я продолжаю получать следующую ошибку, когда она достигает «updateRequest.Execute ()»:

Exception message

Код для аутентификации приведен ниже:

string[] scopes = { DriveService.Scope.Drive };
UserCredential credentials;

using (var stream = new FileStream(RESOURCE_DIRECTORY + "\\google_credentials_v2.json", FileMode.Open, FileAccess.Read))
{
    string credPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
    credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");

    credentials = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets, 
        scopes,
        "user", 
        CancellationToken.None, 
        new FileDataStore(credPath, true)).Result;
}

return credentials;

Код, который я использую для изменения файла, приведен ниже:

public static void MoveFileToNewFolder(DriveService service, string folderName, string fileId, string previousParents = "")
{
    FilesResource.UpdateRequest updateRequest = service.Files.Update(new Google.Apis.Drive.v3.Data.File(), fileId);
    updateRequest.Fields = "id, parents";
    updateRequest.AddParents = GetFolderIDFromName(service, folderName);
    updateRequest.RemoveParents = previousParents;
    updateRequest.Execute();
}

Важные вещи, на которые стоит обратить внимание:

  • Мое аутентифицированное приложение зарегистрировано как "Другое", когда я настроил свой доступ в Google API
  • DriveService.Scope, который я использую, это «DriveService.Scope.Drive»
  • Мне удалось загрузить файлы
  • Я не добавил файл, который пытаюсь изменить с помощью этого приложения

Я не уверен, нужно ли мне вместо этого настроить это как учетную запись службы, но, насколько я понимаю, я смогу изменить файлы. Мое требование - иметь возможность загружать и изменять ВСЕ файлы и папки, находящиеся на диске, независимо от их происхождения.

Заранее спасибо!

1 Ответ

1 голос
/ 05 апреля 2019

Недостаточно прав доступа

В точности означает, что пользователь, с которым вы вошли в систему, не предоставил вашему приложению разрешение на выполнение того, что вы пытаетесь сделать.

Чтобы использовать метод Files.update , вы должны запросить доступ к одной из следующих областей:

enter image description here

запрашивать DriveService.Scope.Drive, что означает, что вы, вероятно, изменили области действия с момента аутентификации пользователя.Таким образом, ваше приложение запускает учетные данные, которые были предоставлены при первом запросе согласия.

Учетные данные для этого пользователя хранятся в этой папке

string credPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");

Вы можете удалить файл учетных данных для"user" это имя, которое вы жестко запрограммировали для своего пользователя.Или вы можете сначала выполнить следующую команду, которая заставит пользователя отозвать доступ к вашему приложению, а затем при следующем запуске оно снова запросит доступ

credential.RevokeTokenAsync(CancellationToken.None);

Существует третий вариант, который вы должны иметьчтобы вызвать запрос силы по запросу, но для жизни я не могу вспомнить эту команду.Я посмотрю немного, посмотрю, смогу ли я найти его и отредактировать, если найду.

Служебные учетные записи

Я не уверен, нужно ли мневместо этого установите ее в качестве учетной записи службы

Если ваше приложение не предназначено для доступа только к одной учетной записи диска, и вы не будете запрашивать доступ к учетной записи диска пользователя, вы не должны использовать учетную запись службы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...