Создание файла на Google Диске (G Suite) из Java с служебной учетной записью: 403 Недостаточно прав

Я пытаюсь создать файл в папке Google Диска.

Чтение из папки работает. Я уже читаю файлы в разных приложениях с разными учетными записями службы.

Я поделился своей папкой G Suite Drive со сгенерированным адресом электронной почты служебной учетной записи и предоставил ему доступ к редактору (чтение, запись, редактирование).

Я попытался скопировать существующий файл (а также создать пустой с нуля) из своего приложения Java Springboot.

public class TemplateDocumentManager {

    @Value("${printing.template.id}")
    private String baseTemplateFileId;

    @Autowired
    private Drive driveService;

    public void createNewContractFromEmptyTemplate() throws IOException {
        File templateFile = getDriveFiles().get(baseTemplateFileId).execute();

        File newFileInstance = getDriveFiles()
                .copy(baseTemplateFileId, templateFile)
                .setSupportsAllDrives(true)
                .execute();
        log.error("Id of newly created file is: {}", newFileInstance.getId());
    }

    protected Drive.Files getDriveFiles() {
        return driveService.files();
    }
}

Служба Google Drive с добавленной аннотацией @Autowired работает правильно. Он создается следующим образом:

@Configuration
public class DriveService {

    public static final String APPLICATION_NAME = "appname";

    @Autowired
    GoogleCredential googleCredential;

    @Bean("driveService")
    public Drive createDriveService() throws GeneralSecurityException, IOException {
        return new Drive.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), googleCredential)
                .setApplicationName(APPLICATION_NAME)
                .build();
    }

    ...
}

Любые идеи о том, что учетная запись службы должна иметь возможность писать в папку G Suite Drive?


person 500 Server error    schedule 04.10.2020    source источник
comment
Включен ли Drive API для проекта и сервисного аккаунта?   -  person Aerials    schedule 05.10.2020
comment
@ Антенны да! Я могу читать из него легко.   -  person 500 Server error    schedule 05.10.2020


Ответы (1)


Вы должны предоставить необходимые разрешения для объекта GoogleCredentials, т.е.

GoogleCredential.fromStream(source).createScoped(scopes)

Области можно найти, например. SheetsScopes или DriveScopes (в зависимости от ваших зависимостей Google)

person Prismodestrux    schedule 06.10.2020
comment
Да, это правильно. Я назначал области дважды. Во второй раз заменив их только read разрешениями. - person 500 Server error; 06.10.2020