Как и в случае с сервисным аккаунтом, при аутентификации одного пользователя используются функции авторизации и управления пользователями, доступные в интерфейсе Google Рекламы. Они позволяют предоставить приложению доступ ко всем необходимым аккаунтам. Этот рабочий процесс аутентификации состоит из двух шагов:
- Вы предоставляете одному пользователю доступ ко всем аккаунтам Google Рекламы, которыми должно управлять приложение.
- Пользователь разрешает вашему приложению управлять его аккаунтами Google Рекламы от его имени, тем самым предоставляя приложению доступ ко всем аккаунтам Google Рекламы.
Поскольку в этом случае задействован только один пользователь, вы можете использовать такие инструменты, как gcloud CLI или пример кода GenerateUserCredential, вместо того чтобы создавать собственный процесс аутентификации пользователей OAuth 2.0.
Похожий вариант использования этого рабочего процесса – когда доступ к вашим аккаунтам можно получить с помощью нескольких аккаунтов пользователей (например, трех или четырех). В этом случае разработка полноценного многопользовательского рабочего процесса аутентификации OAuth не оправдывает себя по сравнению с получением авторизации для трех или четырех пользователей с помощью инструмента командной строки, такого как интерфейс командной строки gcloud.
Недостатки
У этого способа есть несколько недостатков по сравнению с использованием сервисного аккаунта:
- Для аутентификации пользователя необходимо создать идентификатор клиента OAuth 2.0 и секретный ключ в Google Cloud Console. Это требует больше действий, чем создание сервисного аккаунта и ключа.
- Если уполномоченный пользователь покинет команду или компанию, ваше приложение может перестать работать, если вы удалите пользователя из своих аккаунтов или отключите его аккаунт. Сервисные аккаунты не связаны с отдельными пользователями, поэтому этот риск отсутствует.
- Пользователь, авторизующий аккаунт Google Рекламы, должен включить ключи доступа в своем аккаунте Google, чтобы защитить его от взлома из-за недостаточной безопасности, вредоносного ПО или фишинга. Для включения ключей доступа сервисные аккаунты не требуются. Кроме того, они менее уязвимы к этой проблеме, поскольку некоторые из этих способов атаки к ним неприменимы.
Как создать учетные данные
Настройте окно запроса доступа OAuth для своего приложения и добавьте
https://www.googleapis.com/auth/adwordsв качестве области действия OAuth 2.0. Подробнее о том, как настроить окно запроса доступа OAuth…Создайте идентификатор клиента и секретный код клиента, следуя инструкциям. После создания клиента OAuth 2.0 скачайте JSON-файл клиента, нажав кнопку Скачать JSON в диалоговом окне подтверждения. Сохраните файл как
credentials.json.Определите аккаунт пользователя, у которого есть доступ ко всем аккаунтам Google Рекламы, которыми вы хотите управлять с помощью приложения. Если у пользователя нет доступа к некоторым аккаунтам, предоставьте его.
Скачайте и установите gcloud CLI. После установки убедитесь, что инструмент работает правильно, выполнив команду
gcloud versionв командной строке. Вывод будет выглядеть примерно так:gcloud versionGoogle 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Создайте токен обновления 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Команда
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" }
Настройка клиентской библиотеки
Выберите вкладку, соответствующую вашему языку программирования, чтобы получить инструкции по настройке клиентской библиотеки. Если авторизованный пользователь получает доступ к клиентским аккаунтам через управляющий аккаунт 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"
}