Al igual que el flujo de trabajo de la cuenta de servicio, el flujo de autenticación de usuario único utiliza las funciones de autorización y administración de usuarios que ofrece la IU de Google Ads para otorgar a la app acceso a todas las cuentas necesarias. Este flujo de trabajo de autenticación tiene dos pasos:
- Otorgas acceso a un solo usuario a todas las cuentas de Google Ads que debe administrar la app.
- El usuario autoriza a tu app para que administre sus cuentas de Google Ads en su nombre, lo que le otorga acceso a todas las cuentas de Google Ads.
Como solo hay un usuario involucrado, puedes usar herramientas como gcloud CLI o el ejemplo de código GenerateUserCredential en lugar de crear tu propio flujo de autenticación de usuario de OAuth 2.0.
Un caso de uso relacionado para este flujo de trabajo es cuando se puede acceder a tus cuentas a través de un puñado de accesos de usuario (p.ej., 3 o 4 usuarios), por lo que el esfuerzo de desarrollo para crear un flujo de trabajo de autenticación de usuario de OAuth completo no se justifica cuando se compara con el esfuerzo para obtener autorización para 3 o 4 usuarios con una herramienta de línea de comandos como la gcloud CLI.
Desventajas
Este flujo tiene algunas desventajas en comparación con el flujo de trabajo de la cuenta de servicio:
- El flujo de trabajo de autenticación de usuario requiere que crees un ID de cliente y un secreto de OAuth 2.0 en la consola de Google Cloud, lo que requiere más pasos de configuración que crear una cuenta de servicio y una clave.
- Es posible que tu app deba pasar por un proceso adicional de verificación de la app de Google Cloud.
- Si el usuario autorizado abandona el equipo o la empresa, es posible que tu app deje de funcionar si quitas al usuario de tus cuentas o inhabilitas su cuenta de usuario. Las cuentas de servicio no están vinculadas a usuarios individuales, por lo que se evita este riesgo.
- El usuario que autoriza la cuenta de Google Ads debe tomar precauciones adicionales, como habilitar la autenticación de 2 factores para proteger su Cuenta de Google de posibles vulneraciones debido a una seguridad deficiente, malware o phishing. Las cuentas de servicio son menos vulnerables a este problema, ya que algunos de estos modos de ataque no se aplican directamente a ellas.
Genera credenciales
Sigue las instrucciones para configurar una pantalla de consentimiento de OAuth para tu aplicación y agregar
https://www.googleapis.com/auth/adwordscomo un permiso de OAuth 2.0. Consulta Configura tu pantalla de consentimiento de OAuth para obtener más detalles.Sigue las instrucciones para crear un ID de cliente y un secreto de cliente. Una vez que crees el cliente de OAuth 2.0, descarga el archivo JSON del cliente. Para ello, primero haz clic en el ícono de descarga del cliente de OAuth y, luego, en el botón DESCARGAR JSON en la siguiente pantalla. Guarda el archivo como
credentials.json.Identifica una cuenta de usuario que tenga acceso a todas las cuentas de Google Ads que deseas administrar con tu app. Si hay cuentas con acceso faltante, entonces sigue las instrucciones para otorgar el acceso necesario.
Descarga e instala la CLI de gcloud. Una vez instalada, ejecuta el comando
gcloud versiondesde una línea de comandos para verificar que la herramienta funcione correctamente. El resultado puede verse de la siguiente manera.:~$ 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.30Para generar un token de actualización de OAuth 2.0, ejecuta la herramienta de la CLI de gcloud:
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>El archivo
credentials.jsones del paso anterior.El comando
gcloudabre una ventana de acceso a la Cuenta de Google en una ventana nueva del navegador y te guía por los pasos de autenticación de OAuth 2.0. Asegúrate de acceder como el usuario que seleccionaste en los pasos anteriores. Si tu app no está verificada, es posible que veas una pantalla de advertencia. En esos casos, es seguro hacer clic en el Mostrar opciones avanzadas vínculo y en la opción Ir a PROJECT_NAME (sin verificar).
Después de verificar los permisos, haz clic en el botón Continuar para otorgar el permiso. El navegador navega a
https://cloud.google.com/sdk/auth_success, lo que indica que la autenticación se realizó correctamente. La página muestra el siguiente mensaje:Authorization code granted. Close this tab.El comando
gcloudimprime el siguiente mensaje:Credentials saved to file: [/****/.config/gcloud/application_default_credentials.json]Ahora, abre el archivo
application_default_credentials.json. Su contenido debería ser similar al siguiente:{ "account": "", "client_id": "******.apps.googleusercontent.com", "client_secret": "******", "refresh_token": "******", "type": "authorized_user", "universe_domain": "googleapis.com" }
Configuración de la biblioteca cliente
Selecciona la pestaña correspondiente a tu lenguaje de programación para obtener instrucciones sobre cómo configurar tu biblioteca cliente.
Java
Configura las siguientes claves en tu archivo 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
Consulta la guía de configuración para obtener opciones adicionales.
.NET
Puedes inicializar tu instancia de GoogleAdsClient en el tiempo de ejecución con las credenciales que obtuviste del usuario al que le haces llamadas a la 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);
Consulta la guía de configuración para obtener opciones adicionales.
Python
Configura las siguientes claves en tu archivo 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
Consulta la guía de configuración para obtener opciones adicionales.
PHP
Configura las siguientes claves en tu 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"
Consulta la guía de configuración para obtener opciones adicionales.
Ruby
Configura las siguientes claves en tu
google_ads_config.rb archivo.
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
Consulta la guía de configuración para obtener opciones adicionales.
Perl
Configura las siguientes claves en tu archivo 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
Consulta la guía de configuración para obtener opciones adicionales.
curl
Comienza usando un cliente HTTP para recuperar un token de acceso de OAuth 2.0. En esta guía, se usa el comando 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/tokenAhora puedes usar el token de acceso en tus llamadas a la API. En el siguiente ejemplo
se muestra cómo ejecutar un informe de campaña con el método
GoogleAdsService.SearchStream para recuperar las
campañas de tu cuenta. En esta guía, no se abordan los detalles de
los informes.
curl -i -X POST https://googleads.googleapis.com/v24/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"El contenido de query.json es el siguiente:
{
"query": "SELECT campaign.id, campaign.name, campaign.network_settings.target_content_network FROM campaign ORDER BY campaign.id"
}