Код состояния 403 при попытке доступа к определенным частным корзинам партнеров DoubleClick Bid Manager из проекта Google Cloud java.

Привет всем, Текущая ситуация выглядит следующим образом: В настоящее время у меня есть облачный проект Google. Учетная запись, с которой я вхожу в облачный проект Google, также может входить в учетную запись DoubleClick Bid Manager. Моя цель — использовать API-интерфейс DoubleClick Bid Manager для извлечения определенных сегментов, хранящихся в DBM, и сохранения их в моем отдельном облачном проекте Google.

Пока я могу получить доступ к общедоступным сегментам (gdbm-public), а также извлекать и загружать данные, однако, когда я пытаюсь получить доступ к конкретным сегментам партнера таким же образом, т.е. (gdbm-201032- 201843) я получаю код состояния 403.

Прочитав документацию здесь, я обнаружил, что Мне нужно добавить группу google в информацию о партнере DBM на самом DBM. Однако, когда я пытаюсь добавить группу google и сохранить изменения, я получаю сообщение об ошибке, в котором говорится, что изменения не могут быть сохранены.

Здесь я аутентифицируюсь:

return new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId("<service_account_i_cant_show_here>")
            .setServiceAccountScopes(Collections.singleton(StorageScopes.DEVSTORAGE_READ_ONLY))
            .setServiceAccountPrivateKeyFromP12File(new File("secret-privatekey.p12"))
            .build();

Затем я пытаюсь получить доступ к ведру следующим образом:

    String bucketName = "gdbm-201032-201843";
    GoogleCredential credentials = getCredentials();
    Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credentials);

    Storage.Objects.List listObjects = storage.objects().list(bucketName);
    Objects objects;
    do {
        objects = listObjects.execute();
        for (StorageObject object : objects.getItems()) {
            System.out.println(object);
        }
        listObjects.setPageToken(objects.getNextPageToken());
    } while (null != objects.getNextPageToken());

Точнее, listObjects.execute() - это место, где выдается ошибка 403.

Области, которые я пытаюсь изменить, — это Группа Google для чтения журналов и Группа Google для управления журналами в самом партнере.

Любая помощь очень ценится, спасибо!




Ответы (1)


Думаю, у меня есть решение. Я использовал другое средство аутентификации, найденное здесь. Используя связанный класс, я ввел свои учетные данные клиента облачного проекта Google и пользователя, с которым я вхожу как в облачный проект Google, так и в DBM.

Я также изменил область действия на "https://www.googleapis.com/auth/cloud-platform», однако я не уверен на 100%, что это повлияло на результат.

Пример кода:

// Scopes for the OAuth token
private static final Set<String> SCOPES =
        ImmutableSet.of("https://www.googleapis.com/auth/cloud-platform");

public static Credential getUserCredential() throws Exception {
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
            JSON_FACTORY,
            new InputStreamReader(SecurityUtilities.class.
                    getResourceAsStream("/client_secret.json")));
    dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);

// set up authorization code flow.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(dataStoreFactory)
            .build();
    // authorize and get credentials.
    return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver())
            .authorize("<Personal user account>");

Поэтому вместо использования сервисной учетной записи я использовал личную учетную запись.

person Zanny    schedule 09.01.2017