Аналогично рабочему процессу с учётной записью сервиса , процесс аутентификации отдельного пользователя использует функции авторизации и управления пользователями, предлагаемые пользовательским интерфейсом Google Ads, чтобы предоставить приложению доступ ко всем необходимым учётным записям. Этот процесс аутентификации состоит из двух этапов:
- Вы предоставляете одному пользователю доступ ко всем аккаунтам Google Ads , которыми должно управлять приложение.
- Пользователь разрешает вашему приложению управлять своими аккаунтами Google Ads от его имени, тем самым предоставляя приложению доступ ко всем аккаунтам Google Ads.
Поскольку задействован только один пользователь, вы можете положиться на такие инструменты, как gcloud CLI или пример кода GenerateUserCredential, вместо того, чтобы создавать собственный поток аутентификации пользователя OAuth 2.0.
Связанный вариант использования этого рабочего процесса — когда доступ к вашим учетным записям осуществляется через несколько учетных записей пользователей (например, 3–4), поэтому усилия по разработке полноценного рабочего процесса аутентификации пользователей OAuth не оправданы по сравнению с усилиями по получению авторизации для 3–4 пользователей с использованием инструмента командной строки, такого как gcloud CLI.
Недостатки
По сравнению с рабочим процессом учетной записи службы этот процесс имеет несколько недостатков:
- Рабочий процесс аутентификации пользователя требует создания идентификатора клиента OAuth 2.0 и секретного ключа в Google Cloud Console, что требует больше шагов по настройке, чем создание учетной записи службы и ключа.
- Вашему приложению, возможно, придется пройти дополнительную процедуру проверки Google Cloud App .
- Если авторизованный пользователь покидает команду или компанию, ваше приложение может перестать работать, если вы удалите пользователя из своих учётных записей или отключите его. Учётные записи сервисов не привязаны к отдельным пользователям, поэтому этот риск исключен.
- Пользователь, авторизующий аккаунт Google Ads, должен принять дополнительные меры предосторожности, например, включить двухфакторную аутентификацию , чтобы защитить свой аккаунт Google от взлома из-за низкого уровня безопасности, вредоносного ПО или фишинга. Аккаунты сервисов менее уязвимы к этой уязвимости, поскольку некоторые из этих способов атак не затрагивают их напрямую.
Сгенерировать учетные данные
Следуйте инструкциям по настройке экрана согласия OAuth для вашего приложения и добавьте
https://www.googleapis.com/auth/adwords
в качестве области действия OAuth 2.0.Создайте идентификатор и секретный ключ клиента, следуя инструкциям . После создания клиента OAuth 2.0 загрузите JSON-файл клиента, нажав на значок «Загрузить клиент OAuth», а затем на кнопку «СКАЧАТЬ JSON» на следующем экране. Сохраните файл как
credentials.json
.Определите учётную запись пользователя, имеющую доступ ко всем аккаунтам Google Рекламы, которыми вы хотите управлять через приложение. Если у вас есть аккаунты, к которым отсутствует доступ, следуйте инструкциям , чтобы предоставить необходимый доступ.
Скачайте и установите 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 gsutil 5.30
Создайте токен обновления OAuth 2.0, запустив инструмент 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>Файл
credentials.json
взят из предыдущего шага.Команда
gcloud
открывает окно входа в учётную запись Google в новом окне браузера и проводит вас через этапы аутентификации OAuth 2.0. Убедитесь, что вы входите в систему под именем пользователя, выбранного на предыдущих этапах. Если ваше приложение не проверено, вы можете увидеть экран с предупреждением. В таких случаях можно нажать ссылку «Показать расширенные настройки» и выбрать опцию «Перейти к PROJECT_NAME (не проверено)» .После проверки областей действия нажмите кнопку «Продолжить» , чтобы предоставить разрешение. Браузер перейдет по адресу
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" }
Конфигурация клиентской библиотеки
Выберите вкладку, соответствующую вашему языку программирования, чтобы получить инструкции по настройке клиентской библиотеки.
Ява
Настройте следующие ключи в файле ads.properties
.
api.googleads.clientId=INSERT_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_CLIENT_SECRET_HERE
api.googleads.refreshToken=INSERT_REFRESH_TOKEN_HERE
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
Дополнительные параметры см. в руководстве по настройке .
.СЕТЬ
Вы можете инициализировать свой экземпляр GoogleAdsClient
во время выполнения, используя учетные данные, полученные от пользователя, к аккаунтам которого вы совершаете вызовы API.
GoogleAdsConfig config = new GoogleAdsConfig()
{
OAuth2Mode = OAuth2Flow.APPLICATION,
OAuth2ClientId = "INSERT_OAUTH2_CLIENT_ID",
OAuth2ClientSecret = "INSERT_OAUTH2_CLIENT_SECRET",
OAuth2RefreshToken = "INSERT_OAUTH2_REFRESH_TOKEN",
...
};
GoogleAdsClient client = new GoogleAdsClient(config);
Дополнительные параметры см. в руководстве по настройке .
Питон
Настройте следующие ключи в файле google-ads.yaml
.
client_id: INSERT_OAUTH2_CLIENT_ID_HERE
client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE
refresh_token: INSERT_REFRESH_TOKEN_HERE
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
Дополнительные параметры см. в руководстве по настройке .
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"
Дополнительные параметры см. в руководстве по настройке .
Руби
Настройте следующие ключи в файле google_ads_config.rb
.
Google::Ads::GoogleAds::Config.new do |c| c.client_id = 'INSERT_CLIENT_ID_HERE' c.client_secret = 'INSERT_CLIENT_SECRET_HERE' c.refresh_token = 'INSERT_REFRESH_TOKEN_HERE' c.developer_token = 'INSERT_DEVELOPER_TOKEN_HERE' c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE' end
Дополнительные параметры см. в руководстве по настройке .
Перл
Настройте следующие ключи в файле 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
Дополнительные параметры см. в руководстве по настройке .
завиток
Начните с использования HTTP-клиента для получения токена доступа OAuth 2.0. В этом руководстве используется команда curl
.
curl \
--data "grant_type=refresh_token" \
--data "client_id=CLIENT_ID" \
--data "client_secret=CLIENT_SECRET" \
--data "refresh_token=REFRESH_TOKEN" \
https://www.googleapis.com/oauth2/v3/token
Теперь вы можете использовать токен доступа в вызовах API. В следующем примере показано, как создать отчёт по кампании с помощью метода GoogleAdsService.SearchStream
для извлечения данных о кампаниях в вашем аккаунте. В этом руководстве не рассматриваются детали создания отчётов .
curl -i -X POST https://googleads.googleapis.com/v21/customers/CUSTOMER_ID/googleAds:searchStream \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "developer-token: DEVELOPER_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"
}