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

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

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

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

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

Недостатки

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

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

Создание учетных данных

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

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

  3. Определите аккаунт пользователя, у которого есть доступ ко всем аккаунтам Google Рекламы, которыми вы хотите управлять с помощью приложения. Если у пользователя нет доступа к некоторым аккаунтам, предоставьте его. Убедитесь, что в этом аккаунте пользователя настроен ключ доступа (прежде чем новый ключ доступа станет считаться надежным, может действовать задержка в целях безопасности длительностью 7 дней).

  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/v26/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"
}