Процедура аутентификации одного пользователя

Как и в случае с сервисным аккаунтом, при аутентификации одного пользователя используются функции авторизации и управления пользователями, доступные в интерфейсе Google Рекламы, чтобы предоставить приложению доступ ко всем необходимым аккаунтам. Процесс аутентификации состоит из двух этапов:

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

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

Похожий вариант использования этого рабочего процесса – когда доступ к вашим аккаунтам можно получить с помощью нескольких аккаунтов пользователей (например, трех или четырех). В этом случае разработка полноценного рабочего процесса аутентификации OAuth с добавлением пользователей не оправдывает себя по сравнению с получением авторизации для трех или четырех пользователей с помощью инструмента командной строки, такого как gcloud CLI.

Недостатки

У этого способа есть несколько недостатков по сравнению с использованием сервисного аккаунта:

  1. Для рабочего процесса аутентификации пользователя необходимо создать идентификатор и секретный ключ клиента OAuth 2.0 в консоли Google Cloud. Это требует больше действий по настройке, чем создание сервисного аккаунта и ключа.
  2. Если авторизованный пользователь покинет команду или компанию, ваше приложение может перестать работать, если вы удалите его из своих аккаунтов или отключите его аккаунт. Сервисные аккаунты не связаны с отдельными пользователями, поэтому этот риск отсутствует.
  3. Пользователю, который авторизует аккаунт Google Рекламы, следует включить ключи доступа в своем аккаунте Google, чтобы защитить его от взлома из-за недостаточной безопасности, вредоносного ПО или фишинга. Для включения ключей доступа сервисные аккаунты не требуются. Кроме того, они менее уязвимы к этой проблеме, поскольку некоторые из этих способов атаки к ним неприменимы.

Как создать учетные данные

  1. Настройте окно запроса доступа OAuth для своего приложения и добавьте https://www.googleapis.com/auth/adwords в качестве области действия OAuth 2.0. Подробнее о том, как настроить окно запроса доступа OAuth…

  2. Создайте идентификатор и секретный код клиента, следуя инструкциям. После создания клиента OAuth 2.0 скачайте JSON-файл клиента, нажав кнопку Скачать JSON в диалоговом окне подтверждения. Сохраните файл как credentials.json.

  3. Определите аккаунт пользователя, у которого есть доступ ко всем аккаунтам Google Рекламы, которыми вы хотите управлять с помощью приложения. Если у каких-то аккаунтов нет доступа, предоставьте его.

  4. Скачайте и установите gcloud CLI. После установки убедитесь, что инструмент работает правильно, выполнив команду gcloud version в командной строке. Вывод будет выглядеть примерно так:

    gcloud version
    Google Cloud SDK 492.0.0
    alpha 2024.09.06
    beta 2024.09.06
    bq 2.1.8
    bundled-python3-unix 3.11.9
    core 2024.09.06
    enterprise-certificate-proxy 0.3.2
    gcloud-crc32c 1.0.0
    
  5. Создайте токен обновления OAuth 2.0, запустив инструмент командной строки gcloud CLI с файлом credentials.json, полученным на предыдущем шаге. Параметр --client-id-file обязателен, чтобы токен обновления был выпущен в вашем проекте Google API Console, а не в проекте по умолчанию gcloud CLI.

    gcloud auth application-default login \
      --scopes=https://www.googleapis.com/auth/adwords,https://www.googleapis.com/auth/cloud-platform \
      --client-id-file=PATH_TO_CREDENTIALS_JSON
  6. Команда gcloud открывает окно входа в аккаунт Google в новом окне браузера и выполняет шаги аутентификации OAuth 2.0. Войдите в аккаунт пользователя, выбранный на предыдущих шагах. Если приложение не проверено, может появиться экран с предупреждением. В таких случаях можно нажать на ссылку Дополнительно и выбрать вариант Перейти на сайт PROJECT_NAME (небезопасно).

  7. Проверив области действия, нажмите кнопку Продолжить, чтобы предоставить разрешение. Браузер переходит на страницу https://cloud.google.com/sdk/auth_success, что означает успешную аутентификацию. На странице появится следующее сообщение:

    Authorization code granted. Close this tab.

    Команда gcloud выводит следующее сообщение:

    Credentials saved to file: [/****/.config/gcloud/application_default_credentials.json]
    

    Откройте файл application_default_credentials.json. Его содержимое похоже на следующее:

    {
      "account": "",
      "client_id": "******.apps.googleusercontent.com",
      "client_secret": "******",
      "refresh_token": "******",
      "type": "authorized_user",
      "universe_domain": "googleapis.com"
    }
    

Настройка клиентской библиотеки

Выберите вкладку с инструкциями по настройке клиентской библиотеки для вашего языка программирования. Если у авторизованного пользователя есть доступ к клиентским аккаунтам через управляющий аккаунт Google Рекламы, укажите login-customer-id (или loginCustomerId) и 10-значный идентификатор клиента этого управляющего аккаунта без дефисов.

Java

Настройте следующие ключи в файле ads.properties.

api.googleads.clientId=INSERT_OAUTH2_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_OAUTH2_CLIENT_SECRET_HERE
api.googleads.refreshToken=INSERT_OAUTH2_REFRESH_TOKEN_HERE
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

Дополнительные варианты приведены в руководстве по настройке.

.NET

Задайте учетные данные OAuth 2.0 в экземпляре GoogleAdsConfig и используйте их для инициализации объекта GoogleAdsClient.

GoogleAdsConfig config = new GoogleAdsConfig()
{
    OAuth2Mode = OAuth2Flow.APPLICATION,
    OAuth2ClientId = "INSERT_OAUTH2_CLIENT_ID_HERE",
    OAuth2ClientSecret = "INSERT_OAUTH2_CLIENT_SECRET_HERE",
    OAuth2RefreshToken = "INSERT_OAUTH2_REFRESH_TOKEN_HERE",
    LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE",
};
GoogleAdsClient client = new GoogleAdsClient(config);

Дополнительные варианты приведены в руководстве по настройке.

Python

Настройте следующие ключи в файле google-ads.yaml.

client_id: INSERT_OAUTH2_CLIENT_ID_HERE
client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE
refresh_token: INSERT_OAUTH2_REFRESH_TOKEN_HERE
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
use_proto_plus: True

Дополнительные варианты приведены в руководстве по настройке.

PHP

Настройте следующие клавиши на устройстве google_ads_php.ini.

[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"

[OAUTH2]
clientId = "INSERT_OAUTH2_CLIENT_ID_HERE"
clientSecret = "INSERT_OAUTH2_CLIENT_SECRET_HERE"
refreshToken = "INSERT_OAUTH2_REFRESH_TOKEN_HERE"

Дополнительные варианты приведены в руководстве по настройке.

Ruby

Настройте следующие ключи в файле google_ads_config.rb.

Google::Ads::GoogleAds::Config.new do |c|
  c.client_id = 'INSERT_OAUTH2_CLIENT_ID_HERE'
  c.client_secret = 'INSERT_OAUTH2_CLIENT_SECRET_HERE'
  c.refresh_token = 'INSERT_OAUTH2_REFRESH_TOKEN_HERE'
  c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end

Дополнительные варианты приведены в руководстве по настройке.

Perl

Настройте следующие ключи в файле googleads.properties.

clientId=INSERT_OAUTH2_CLIENT_ID_HERE
clientSecret=INSERT_OAUTH2_CLIENT_SECRET_HERE
refreshToken=INSERT_OAUTH2_REFRESH_TOKEN_HERE
loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

Дополнительные варианты приведены в руководстве по настройке.

curl

Сначала получите токен доступа OAuth 2.0 с помощью HTTP-клиента. В этом руководстве используется команда curl.

curl \
  --data "grant_type=refresh_token" \
  --data "client_id=CLIENT_ID" \
  --data "client_secret=CLIENT_SECRET" \
  --data "refresh_token=REFRESH_TOKEN" \
  https://oauth2.googleapis.com/token

Вы можете использовать токен доступа в вызовах API. В приведенном ниже примере показано, как создать отчет о кампании с помощью метода GoogleAdsService.SearchStream, чтобы получить список кампаний в аккаунте. В этом руководстве не рассматриваются подробности создания отчетов.

curl -i -X POST \
  https://googleads.googleapis.com/v25/customers/CUSTOMER_ID/googleAds:searchStream \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "login-customer-id: LOGIN_CUSTOMER_ID" \
  --data-binary "@query.json"

Содержимое файла query.json:

{
  "query": "SELECT campaign.id, campaign.name, campaign.network_settings.target_content_network FROM campaign ORDER BY campaign.id"
}