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 seu aplicativo cliente da API Google Ads acesse a conta do Google Ads de um usuário sem precisar processar ou armazenar as informações de login dele.

Entenda o modelo de acesso do Google Ads

Para trabalhar de forma eficaz com a API Google Ads, é importante entender como funciona o modelo de acesso do Google Ads. Recomendamos que você leia o guia do modelo de acesso do Google Ads.

Fluxos de trabalho do OAuth

Há 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. A biblioteca Python é configurada da seguinte maneira:

  • Se você estiver usando um arquivo google-ads.yaml ou uma string YAML, adicione o seguinte à sua configuração para definir o caminho para o arquivo JSON de chave privada no seu ambiente local:

    json_key_file_path: JSON_KEY_FILE_PATH
    

    Em seguida, chame os métodos load_from_storage ou load_from_string:

    from google.ads.googleads.client import GoogleAdsClient
    client = GoogleAdsClient.load_from_storage()
    
  • Se você estiver usando um dict para configurar a biblioteca, inclua o seguinte par de chave-valor e chame o método load_from_dict, transmitindo a configuração dict:

    from google.ads.googleads.client import GoogleAdsClient
    
    configuration = {
      # ...
      "json_key_file_path": JSON_KEY_FILE_PATH
      # ...
    }
    
    client = GoogleAdsClient.load_from_dict(configuration)
    
  • Se você estiver usando variáveis de ambiente, adicione o seguinte à configuração ou ao ambiente bash:

    export GOOGLE_ADS_JSON_KEY_FILE_PATH=JSON_KEY_FILE_PATH
    

    Em seguida, chame o método load_from_env:

    from google.ads.googleads.client import GoogleAdsClient
    client = GoogleAdsClient.load_from_env()
      ```
    

Se a opção de configuração json_key_file_path estiver presente em qualquer um desses métodos e a opção use_application_default_credentials for False ou não estiver definida, a biblioteca vai autorizar automaticamente usando o fluxo da conta de serviço.

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. Conceda 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 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 como a gcloud CLI ou o exemplo de código generate_user_credentials para autorizar seu app a gerenciar todas as contas do Google Ads em nome dele.

A biblioteca pode ser inicializada usando as credenciais OAuth 2.0 do usuário da seguinte maneira:

Se você estiver usando a ferramenta de linha de comando gcloud (recomendado)

  1. Siga a documentação Gerar credenciais para configurar o Application Default Credentials (ADC) no seu ambiente local.

  2. Adicione a seguinte configuração à sua string google-ads.yaml ou YAML:

    use_application_default_credentials: true
    

    Em seguida, chame o método load_from_storage ou load_from_string:

    from google.ads.googleads.client import GoogleAdsClient
    client = GoogleAdsClient.load_from_storage()
    

    Se você usar um dict para configurar a biblioteca, inclua o seguinte par de chave-valor e chame o método load_from_dict:

    from google.ads.googleads.client import GoogleAdsClient
    
    configuration = {
      # ...
      "use_account_default_credentials": True
      # ...
    }
    
    client = GoogleAdsClient.load_from_dict(configuration)
    

    Se você estiver usando variáveis de ambiente, adicione o seguinte à configuração ou ao ambiente bash:

    export GOOGLE_ADS_USE_ACCOUNT_DEFAULT_CREDENTIALS=true
    

    Em seguida, chame o método load_from_env:

    from google.ads.googleads.client import GoogleAdsClient
    client = GoogleAdsClient.load_from_env()
    

Se você estiver processando tokens OAuth diretamente

  1. Siga as etapas para configurar um projeto do console e baixe o arquivo JSON que inclui o ID do cliente e o segredo do cliente do projeto.

  2. Clone a biblioteca de cliente Python na sua máquina e mude para o diretório dela:

    $ git clone https://github.com/googleads/google-ads-python.git
    $ cd google-ads-python
    
  3. Execute o exemplo, fornecendo um caminho absoluto para o arquivo JSON baixado na etapa 1:

    $ python examples/authentication/generate_user_credentials.py -c PATH_TO_CREDENTIALS_JSON
    

    Quando a ação for concluída, um token de atualização será impresso no console. Copie e salve para a próxima etapa.

  4. Configure a biblioteca adicionando as seguintes configurações à sua configuração de escolha:

    Adicione a seguinte configuração à sua string google-ads.yaml ou YAML:

    client_id: INSERT_OAUTH2_CLIENT_ID_HERE
    client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE
    refresh_token: INSERT_REFRESH_TOKEN_HERE
    

    Em seguida, chame o método load_from_storage ou load_from_string:

    from google.ads.googleads.client import GoogleAdsClient
    client = GoogleAdsClient.load_from_storage()
    

    Se você estiver usando um dict para configurar a biblioteca, inclua os seguintes pares de chave-valor e chame o método load_from_dict:

    from google.ads.googleads.client import GoogleAdsClient
    
    configuration = {
      # ...
      "client_id": INSERT_OAUTH2_CLIENT_ID_HERE
      "client_secret": INSERT_OAUTH2_CLIENT_SECRET_HERE
      "refresh_token": INSERT_REFRESH_TOKEN_HERE
      # ...
    }
    
    client = GoogleAdsClient.load_from_dict(configuration)
    

    Se você estiver usando variáveis de ambiente, adicione o seguinte à configuração ou ao ambiente bash:

    export GOOGLE_ADS_CLIENT_ID=INSERT_OAUTH2_CLIENT_ID_HERE
    export GOOGLE_ADS_CLIENT_SECRET=INSERT_OAUTH2_CLIENT_SECRET_HERE
    export GOOGLE_ADS_REFRESH_TOKEN=INSERT_REFRESH_TOKEN_HERE
    

    Em seguida, chame o método load_from_env:

    from google.ads.googleads.client import GoogleAdsClient
    client = GoogleAdsClient.load_from_env()
    

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. A biblioteca pode ser inicializada usando as credenciais do usuário da seguinte maneira, o que pressupõe que seu aplicativo obtenha credenciais no tempo de execução, executando um fluxo de autorização ou carregando-as de um datastore:

Um dict é o mecanismo de configuração mais simples para usar ao obter credenciais no tempo de execução:

from google.ads.googleads.client import GoogleAdsClient

configuration = {
  # ...
  "client_id": client_id
  "client_secret": client_secret
  "refresh_token": refresh_token
  # ...
}

client = GoogleAdsClient.load_from_dict(configuration)

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

Autenticação manual

Você pode gerar credenciais de autenticação com qualquer abordagem e fornecê-las ao GoogleAdsClient manualmente ao instanciar a classe do cliente diretamente. Supondo que o objeto de credenciais criado seja uma instância de google.auth.credentials.Credentials, você pode transmiti-lo da seguinte maneira:

from google.ads.googleads.client import GoogleAdsClient
from google.auth import default

# This line retrieves ADCs from the environment. You can use any authentication
# approach as long as the `credentials` variable is an instance of
# `google.auth.credentials.Credentials`
credentials = default(scopes=["https://www.googleapis.com/auth/adwords"])

client = GoogleAdsClient(
  credentials=credentials,
  # ... insert remaining parameters
)

E se meu 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 Python fornece os exemplos de código a seguir que ilustram como processar esses casos.

  1. O exemplo de código get_account_hierarchy mostra como recuperar a lista de todas as contas em uma conta de administrador do Google Ads.
  2. O exemplo de código list_accessible_customers 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.