Autenticação e autorização

Assim como outras APIs do Google, a API Google Ads usa o protocolo OAuth 2.0 para autenticação e autorização. O OAuth 2.0 permite que o app cliente da API Google Ads acesse a conta de um usuário sem precisar processar ou armazenar as informações de login dele.

Entender o modelo de acesso do Google Ads

Para trabalhar de forma eficaz com a API Google Ads, entenda como funciona o modelo de acesso do Google Ads. Consulte o guia do modelo de acesso do Google Ads.

Fluxos de trabalho do OAuth

Existem três fluxos de trabalho comuns usados ao trabalhar com a API Google Ads.

Fluxo da conta de serviço

Esse é o fluxo de trabalho recomendado se o seu não exigir interação humana. Esse fluxo de trabalho exige uma etapa de configuração em que o usuário adiciona uma conta de serviço à conta do Google Ads. Em seguida, o app pode usar as credenciais da conta de serviço para gerenciar a conta do Google Ads do usuário. Para configurar isso, crie e faça o download do arquivo de chave JSON no console do Google Cloud. Em seguida, copie google_ads_config.rb para seu diretório inicial e modifique-o para especificar o local do arquivo de chave da conta de serviço (e o endereço de e-mail opcional do usuário a ser representado ao usar a delegação em todo o domínio do 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'

Se você preferir não armazenar essas informações em um arquivo e usar variáveis de ambiente, defina GOOGLE_ADS_JSON_KEY_FILE_PATH (e GOOGLE_ADS_IMPERSONATED_EMAIL opcional):

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"

Também é possível transmitir o caminho do arquivo de chave da conta de serviço (e o e-mail representado opcional) de maneira programática durante a execução:

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, use a gem googleauth para criar credenciais de conta de serviço e transmita credentials.updater_proc para 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

Consulte o guia de fluxo de trabalho da conta de serviço para saber mais.

Fluxo de autenticação de usuário único

Esse fluxo de trabalho pode ser usado se você não puder usar contas de serviço. Esse fluxo de trabalho exige duas etapas de configuração:

  1. Dê a um único usuário acesso a todas as contas que serão gerenciadas usando a API Google Ads. Uma abordagem comum é dar ao usuário acesso a uma conta de administrador da API Google Ads e vincular todas as contas do Google Ads a ela.
  2. O usuário executa uma ferramenta de linha de comando, como a ferramenta de linha de comando do Google Cloud ou o exemplo de código GenerateUserCredentials, para autorizar seu app a gerenciar todas as contas do Google Ads em nome dele.

As credenciais do OAuth 2.0 podem ser configuradas para Ruby copiando o arquivo google_ads_config.rb para seu diretório inicial e modificando-o para incluir seu ID do cliente, chave secreta do cliente e token de atualização:

# 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'

O cliente lê automaticamente o arquivo de configuração do diretório inicial se for instanciado sem argumentos:

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

Como alternativa, se você preferir armazenar o arquivo em outro lugar, instancie o cliente transmitindo o caminho para onde você guarda esse arquivo:

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

Se você preferir não armazenar essas informações em um arquivo e usar variáveis de ambiente, defina cada uma delas:

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"

Também é possível transmitir as informações de maneira programática no ambiente de execução:

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

Consulte o guia do fluxo de trabalho de autenticação de usuário único para saber mais.

Fluxo de autenticação multiusuário

Esse é o fluxo de trabalho recomendado se o app permitir que os usuários façam login e autorizem o app a gerenciar as contas do Google Ads em nome deles. O app cria e gerencia as credenciais de usuário do OAuth 2.0. Esse fluxo de trabalho pode ser configurado de maneira semelhante ao fluxo de usuário único, com o login_customer_id também especificado.

Recomendamos usar um arquivo de configuração. Copie o arquivo google_ads_config.rb para seu diretório inicial e modifique-o para incluir o ID do cliente, a chave secreta do cliente, o token de atualização e o ID do 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'

O cliente lê automaticamente o arquivo de configuração do diretório inicial se for instanciado sem argumentos:

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

Como alternativa, se você preferir armazenar o arquivo em outro lugar, instancie o cliente transmitindo o caminho para onde você guarda esse arquivo:

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

Se você preferir não armazenar essas informações em um arquivo e usar variáveis de ambiente, defina cada uma delas:

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"

Também é possível transmitir as informações de maneira programática no ambiente de execução:

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

Consulte o guia do fluxo de trabalho de autenticação multiusuário para saber mais. A biblioteca de cliente Ruby inclui um exemplo de código para referência. O exemplo de código de linha de comando GenerateUserCredentials ilustra como obter a autenticação do usuário em tempo de execução para gerenciar as contas do Google Ads em nome dele. Use este exemplo de código como referência para criar apps para computador que exigem autenticação do usuário.

Gerenciar várias contas

É comum um usuário gerenciar mais de uma conta do Google Ads, seja por acesso direto a elas ou por uma conta de administrador do Google Ads. A biblioteca de cliente Ruby fornece os exemplos de código a seguir que ilustram como lidar com esses casos:

  1. O exemplo de código GetAccountHierarchy mostra como recuperar a lista de todas as contas em uma conta de administrador do Google Ads.
  2. O exemplo de código ListAccessibleCustomers mostra como recuperar a lista de todas as contas a que um usuário tem acesso direto. Essas contas podem ser usadas como valores válidos para a configuração login_customer_id.

Application Default Credentials

A biblioteca de cliente Ruby (v36.1.0 e versões mais recentes) também oferece suporte à autenticação com credenciais padrão do aplicativo (ADC). Ele permite definir as credenciais padrão do aplicativo sem precisar configurar as informações do OAuth 2.0 na configuração do aplicativo.

Isso é útil principalmente para desenvolvimento local ou com diferentes APIs do Google, já que é possível reutilizar as mesmas credenciais, desde que elas acessem os escopos necessários do OAuth 2.0.

Para a API Google Ads, verifique se as credenciais padrão do aplicativo podem acessar o escopo https://www.googleapis.com/auth/adwords do OAuth 2.0.

Para usar as credenciais padrão do aplicativo, use a ferramenta de linha de comando do Google Cloud e faça a autenticação para o ADC:

gcloud auth application-default login

Esse comando abre um navegador da Web para concluir o fluxo de autenticação da sua Conta do Google. Depois de autorizado, ele armazena as credenciais em um local padrão. Em seguida, atualize o aplicativo para usar o ADC.

Copie o arquivo google_ads_config.rb para seu diretório inicial e defina 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

Se você preferir não armazenar essas informações em um arquivo e usar variáveis de ambiente, defina GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS:

export GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS="true"

Também é possível transmitir as informações de maneira programática no ambiente de execução. Ao inicializar o cliente no código Ruby, defina config.use_application_default_credentials = true e não forneça credenciais explícitas do OAuth 2.0. A biblioteca detecta e usa automaticamente as credenciais configuradas pela ferramenta de linha de comando do 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

Consulte a página de configuração para mais detalhes sobre as opções disponíveis para configurar a biblioteca de cliente Ruby.