Autenticación y autorización

Al igual que otras APIs de Google, la API de Google Ads usa el protocolo OAuth 2.0 para la autenticación y la autorización. OAuth 2.0 permite que tu cliente de API de Google Ads acceda a la cuenta de Google Ads de un usuario sin tener que administrar ni almacenar su información de acceso.

Comprende el modelo de acceso de Google Ads

Para trabajar de manera eficaz con la API de Google Ads, comprende cómo funciona el modelo de acceso de Google Ads. Consulta la guía del modelo de acceso de Google Ads.

Flujos de trabajo de OAuth

Existen tres flujos de trabajo comunes que se usan cuando se trabaja con la API de Google Ads.

Flujo de la cuenta de servicio

Este es el flujo de trabajo recomendado si tu flujo de trabajo no requiere ninguna interacción humana. Este flujo de trabajo requiere un paso de configuración, en el que el usuario agrega una cuenta de servicio a su cuenta de Google Ads. Luego, la app puede usar las credenciales de la cuenta de servicio para administrar la cuenta de Google Ads del usuario. Para configurar esto, crea y descarga el archivo de claves JSON en la consola de Google Cloud, luego, copia google_ads_config.rb en tu directorio principal y modifícalo para especificar la ubicación del archivo de claves de tu cuenta de servicio (y la dirección de correo electrónico opcional del usuario que se suplantará cuando se use la delegación de todo el dominio de Google Workspace):

# You can also authenticate using a service account. If "keyfile" is
# specified below, then service account authentication will be assumed and
# the above authentication fields ignored. Read more about service account
# authentication here:
# https://developers.google.com/google-ads/api/docs/oauth/service-accounts
c.keyfile = 'path/to/keyfile.json'
# Optional unless using Google Workspace domain-wide delegation:
c.impersonate = 'INSERT_EMAIL_ADDRESS_TO_IMPERSONATE_HERE'

Si prefieres no almacenar esta información en un archivo y usar variables de entorno, puedes configurar GOOGLE_ADS_JSON_KEY_FILE_PATH (y, de forma opcional, GOOGLE_ADS_IMPERSONATED_EMAIL):

export GOOGLE_ADS_JSON_KEY_FILE_PATH="/path/to/your/service-account-key.json"
# Optional unless using Google Workspace domain-wide delegation:
export GOOGLE_ADS_IMPERSONATED_EMAIL="your_email@email.com"

También puedes pasar la ruta de acceso al archivo de claves de la cuenta de servicio (y el correo electrónico de identidad temporal opcional) de forma programática en el entorno de ejecución:

require 'google/ads/google_ads'

client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
  config.keyfile = '/path/to/your/service-account-key.json'
  # Optional unless using Google Workspace domain-wide delegation:
  config.impersonate = 'INSERT_EMAIL_ADDRESS_TO_IMPERSONATE_HERE'
end

Como alternativa, puedes usar la gema googleauth para construir credenciales de cuenta de servicio y pasar credentials.updater_proc a config.authentication:

require 'googleauth'
require 'google/ads/google_ads'

# Path to your service account key file.
key_file = '/path/to/your/service-account-key.json'

# Define the scopes needed for the Google Ads API.
scopes = ['https://www.googleapis.com/auth/adwords']

# Create service account credentials.
credentials = File.open(key_file) do |io|
  Google::Auth::ServiceAccountCredentials.make_creds(
    json_key_io: io,
    scope: scopes
  )
end

# Initialize the Google Ads API client with these credentials.
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
  # Inject the service account credential updater proc.
  config.authentication = credentials.updater_proc
end

Consulta la guía de flujo de trabajo de la cuenta de servicio para obtener más información.

Flujo de autenticación de un solo usuario

Este flujo de trabajo se puede usar si no puedes usar cuentas de servicio. Este flujo de trabajo requiere dos pasos de configuración:

  1. Otorga a un solo usuario acceso a todas las cuentas que se administrarán con la API de Google Ads. Un enfoque común es otorgar al usuario acceso a una cuenta de administrador de la API de Google Ads y vincular todas las cuentas de Google Ads con esa cuenta de administrador.
  2. El usuario ejecuta una herramienta de línea de comandos, como la herramienta de línea de comandos de Google Cloud o el ejemplo de código de GenerateUserCredentials, para autorizar a tu app a administrar todas sus cuentas de Google Ads en su nombre.

Las credenciales de OAuth 2.0 se pueden configurar para Ruby copiando el archivo google_ads_config.rb en tu directorio principal y modificándolo para que incluya tu ID de cliente, el secreto de cliente y el token de actualización:

# Authentication tells the API that you are allowed to make changes to the
# specific account you're trying to access.
# The default method of authentication is to use a refresh token, client id,
# and client secret to generate an access token.
c.client_id = 'INSERT_CLIENT_ID_HERE'
c.client_secret = 'INSERT_CLIENT_SECRET_HERE'
c.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'

El cliente lee automáticamente el archivo de configuración desde el directorio principal si se crea una instancia sin argumentos:

client = Google::Ads::GoogleAds::GoogleAdsClient.new

Como alternativa, si prefieres almacenar el archivo en otro lugar, puedes crear una instancia del cliente pasando la ruta de acceso a la ubicación en la que guardas este archivo:

client = Google::Ads::GoogleAds::GoogleAdsClient.new(
  'path/to/google_ads_config.rb'
)

Si prefieres no almacenar esta información en un archivo y usar variables de entorno, puedes configurar cada una de ellas:

export GOOGLE_ADS_CLIENT_ID="INSERT_CLIENT_ID_HERE"
export GOOGLE_ADS_CLIENT_SECRET="INSERT_CLIENT_SECRET_HERE"
export GOOGLE_ADS_REFRESH_TOKEN="INSERT_REFRESH_TOKEN_HERE"

También puedes pasar la información de manera programática en el entorno de ejecución:

client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
  config.client_id = 'INSERT_CLIENT_ID_HERE'
  config.client_secret = 'INSERT_CLIENT_SECRET_HERE'
  config.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'
end

Consulta la guía del flujo de trabajo de autenticación de un solo usuario para obtener más información.

Flujo de autenticación multiusuario

Este es el flujo de trabajo recomendado si tu app permite que los usuarios accedan y autoricen a tu app a administrar sus cuentas de Google Ads en su nombre. Tu app compila y administra las credenciales de usuario de OAuth 2.0. Este flujo de trabajo se puede configurar de manera similar al flujo de un solo usuario, con el login_customer_id especificado también.

Se recomienda usar un archivo de configuración. Copia el archivo google_ads_config.rb en tu directorio principal y modifícalo para incluir tu ID de cliente, secreto del cliente, token de actualización y ID de cliente:

# Authentication tells the API that you are allowed to make changes to the
# specific account you're trying to access.
# The default method of authentication is to use a refresh token, client id,
# and client secret to generate an access token.
c.client_id = 'INSERT_CLIENT_ID_HERE'
c.client_secret = 'INSERT_CLIENT_SECRET_HERE'
c.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'

# Required for manager accounts only: Specify the login customer ID used to
# authenticate API calls. This will be the customer ID of the authenticated
# manager account. If you need to use different values for this field, then
# make sure to fetch a new copy of the service after each time you change the
# value.
c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'

El cliente lee automáticamente el archivo de configuración desde el directorio principal si se crea una instancia sin argumentos:

client = Google::Ads::GoogleAds::GoogleAdsClient.new

Como alternativa, si prefieres almacenar el archivo en otro lugar, puedes crear una instancia del cliente pasando la ruta de acceso a la ubicación en la que guardas este archivo:

client = Google::Ads::GoogleAds::GoogleAdsClient.new(
  'path/to/google_ads_config.rb'
)

Si prefieres no almacenar esta información en un archivo y usar variables de entorno, puedes configurar cada una de ellas:

export GOOGLE_ADS_CLIENT_ID="INSERT_CLIENT_ID_HERE"
export GOOGLE_ADS_CLIENT_SECRET="INSERT_CLIENT_SECRET_HERE"
export GOOGLE_ADS_REFRESH_TOKEN="INSERT_REFRESH_TOKEN_HERE"
export GOOGLE_ADS_LOGIN_CUSTOMER_ID="INSERT_LOGIN_CUSTOMER_ID_HERE"

También puedes pasar la información de manera programática en el entorno de ejecución:

client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
  config.client_id = 'INSERT_CLIENT_ID_HERE'
  config.client_secret = 'INSERT_CLIENT_SECRET_HERE'
  config.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'
  config.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end

Consulta la guía del flujo de trabajo de autenticación multiusuario para obtener más información. La biblioteca cliente de Ruby incluye un ejemplo de código como referencia. En el ejemplo de código de línea de comandos de GenerateUserCredentials, se ilustra cómo obtener la autenticación del usuario durante el tiempo de ejecución para administrar sus cuentas de Google Ads en su nombre. Puedes usar este ejemplo de código como referencia para compilar apps para computadoras que requieran autenticación de usuarios.

Administrar varias cuentas

Es común que un usuario administre más de una cuenta de Google Ads, ya sea a través del acceso directo a las cuentas o de una cuenta de administrador de Google Ads. La biblioteca cliente de Ruby proporciona los siguientes ejemplos de código que ilustran cómo controlar esos casos:

  1. En el ejemplo de código de GetAccountHierarchy, se muestra cómo recuperar la lista de todas las cuentas de una cuenta de administrador de Google Ads.
  2. En el ejemplo de código de ListAccessibleCustomers, se muestra cómo recuperar la lista de todas las cuentas a las que un usuario tiene acceso directo. Luego, estas cuentas se pueden usar como valores válidos para el parámetro de configuración login_customer_id.

Credenciales predeterminadas de la aplicación

La biblioteca cliente de Ruby (v36.1.0 y versiones posteriores) también admite la autenticación con las credenciales predeterminadas de la aplicación (ADC). Te permite establecer las credenciales predeterminadas para tu aplicación sin necesidad de configurar la información de OAuth 2.0 en la configuración de la aplicación.

Esto es particularmente útil para el desarrollo local o para el desarrollo con diferentes APIs de Google, ya que puedes reutilizar las mismas credenciales, siempre que puedan acceder a los permisos de OAuth 2.0 requeridos.

En el caso de la API de Google Ads, asegúrate de que tus credenciales predeterminadas de la aplicación puedan acceder al permiso de OAuth 2.0 de https://www.googleapis.com/auth/adwords.

Para usar las credenciales predeterminadas de la aplicación, usa la herramienta de línea de comandos de Google Cloud y autentica para ADC:

gcloud auth application-default login

Este comando abre un navegador web para completar el flujo de autenticación de tu Cuenta de Google. Una vez que se autoriza, almacena las credenciales en una ubicación estándar. Luego, debes actualizar tu aplicación para usar ADC.

Copia el archivo google_ads_config.rb en tu directorio principal y establece use_application_default_credentials como true:

# You can also authenticate using Application Default Credentials (ADC).
# To understand how ADC discovers credentials in a given environment, see:
# https://developers.google.com/identity/protocols/application-default-credentials
c.use_application_default_credentials = true

Si prefieres no almacenar esta información en un archivo y usar variables de entorno, puedes configurar GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS:

export GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS="true"

También puedes pasar la información de manera programática en el entorno de ejecución. Cuando inicialices el cliente en tu código de Ruby, configura config.use_application_default_credentials = true y no proporciones credenciales de OAuth 2.0 explícitas. La biblioteca detecta y usa automáticamente las credenciales configuradas por la herramienta de línea de comandos de Google Cloud:

# Initialize the client using Application Default Credentials.
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
  config.use_application_default_credentials = true

  # Optional: Specify a login customer ID if you are accessing accounts
  # through a manager account.
  # config.login_customer_id = 'YOUR_LOGIN_CUSTOMER_ID'

  # Do NOT include client_id, client_secret, or refresh_token here.
end

Consulta la página de configuración para obtener más detalles sobre las opciones disponibles para configurar la biblioteca cliente de Ruby.