Не авторизован при использовании служебной учетной записи для отображения файлов дисков на GSuite - PullRequest
0 голосов
/ 30 марта 2020

У меня есть приложение, которое использует API Google. Я создал для него служебную учетную запись, загрузил ключи и включил делегирование по всему домену для GSuite. Области применения включают Drive. Я пытаюсь перебрать файлы Drive пользователей GSuite, используя учетную запись службы, чтобы выдать себя за пользователя следующим образом:

final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

GoogleCredential.Builder builder = new GoogleCredential.Builder()
    .setTransport(HTTP_TRANSPORT)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId(serviceAccountEmail)            
    .setServiceAccountPrivateKey(credFromJson(HTTP_TRANSPORT).getServiceAccountPrivateKey())
    .setServiceAccountScopes(SCOPES);
builder.setServiceAccountUser(userEmail);

GoogleCredential credential = builder.build();

return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, null)
                .setApplicationName(APPLICATION_NAME)
                .setHttpRequestInitializer(credential).build();

GoogleCredential создан успешно. Он имеет serviceAccountId, serviceAccountPrivateKey, serviceAccountUser и необходимые области.

Однако при вызове

driveService.files().list().setFields("nextPageToken, files(*)").execute().getFiles();

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

details

1 Ответ

0 голосов
/ 30 марта 2020

401 Несанкционированная ошибка.

Означает, что у вас нет доступа. Почему у вас нет доступа - это другой вопрос. Это может быть настройка делегирования или аутентификация.

Вы пытались создать файл file.list для своей учетной записи, чтобы проверить, работает ли он вообще. Это скажет вам, если это проблема с вашей авторизацией или если это настройка gsuite.

Но мне кажется, что вы даже не устанавливаете учетные данные, которые никогда не будут работать.

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    GoogleCredential credential = GoogleCredential
        .fromStream(new FileInputStream(KEY_FILE_LOCATION))
        .createScoped(DriveScopes.all());

    // Construct the Analytics Reporting service object.
    return new Drive.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...