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

Semelhante ao [fluxo de trabalho da conta de serviço][service-account-workflow], o fluxo de autenticação de usuário único usa os recursos de autorização e gerenciamento de usuários oferecidos pela interface do Google Ads para conceder ao app acesso a todas as contas necessárias. Esse fluxo de trabalho de autenticação tem duas etapas:

  • Você concede a um único usuário acesso a todas as contas do Google Ads que precisam ser gerenciadas pelo app.
  • O usuário autoriza seu app a gerenciar as contas do Google Ads em nome dele, concedendo acesso a todas as contas do Google Ads.

Como há apenas um usuário envolvido, você pode usar ferramentas como a [CLI gcloud][gcloud-cli] ou o [exemplo de código GenerateUserCredential][generate-user-credentials-example] em vez de criar seu próprio fluxo de autenticação de usuário OAuth 2.0.

Um caso de uso relacionado para esse fluxo de trabalho é quando suas contas podem ser acessadas por alguns logins de usuário (por exemplo, 3 a 4 usuários). Assim, o esforço de desenvolvimento para criar um fluxo de trabalho de autenticação de usuário OAuth completo não é justificado quando comparado ao esforço para obter autorização para 3 a 4 usuários usando uma ferramenta de linha de comando, como a CLI gcloud.

Desvantagens

Há algumas desvantagens nesse fluxo em comparação com o fluxo de trabalho da conta de serviço:

  1. O fluxo de trabalho de autenticação de usuário exige que você crie um ID e uma chave secreta do cliente OAuth 2.0 no Console do Google Cloud, o que exige mais etapas de configuração do que criar uma conta de serviço e uma chave.
  2. Seu app pode precisar passar por um [processo de verificação de app do Google Cloud][app-verification].
  3. Se o usuário autorizado sair da equipe ou da empresa, o app poderá parar de funcionar se você remover o usuário das suas contas ou desativar a conta de usuário. As contas de serviço não estão vinculadas a usuários individuais, portanto, esse risco é evitado.
  4. O usuário que autoriza a conta do Google Ads precisa tomar precauções extras, como [ativar a autenticação de dois fatores][2fa] para se defender contra o comprometimento da Conta do Google devido a segurança inadequada, malware ou phishing. As contas de serviço são menos vulneráveis a esse problema, já que alguns desses modos de ataque não se aplicam diretamente a elas.

Gerar credenciais

  1. Siga as [instruções][configure-oauth-consent] para configurar uma tela de permissão do OAuth para seu aplicativo e adicione https://www.googleapis.com/auth/adwords como um escopo do OAuth 2.0. Consulte Como configurar a tela de permissão OAuth para mais detalhes.

  2. Crie um ID e uma chave secreta do cliente seguindo as [instruções][create-credentials]. Depois de criar o cliente OAuth 2.0, faça o download do arquivo JSON do cliente. Primeiro, clique no ícone "Fazer o download do cliente OAuth" e, em seguida, no botão "FAZER O DOWNLOAD DO JSON" na tela seguinte. Salve o arquivo como credentials.json.

  3. Identifique uma conta de usuário que tenha acesso a todas as contas do Google Ads que você quer gerenciar usando seu app. Se houver contas com acesso ausente, siga as [instruções][grant-access] para conceder o acesso necessário.

  4. [Faça o download e instale][install-gcloud] a CLI gcloud. Depois de instalada, verifique se a ferramenta funciona corretamente executando o comando gcloud version em um prompt de linha de comando. A saída pode ser semelhante a esta:

    :~$ 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.30
  5. Gere um token de atualização do OAuth 2.0 executando a ferramenta da CLI 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>

    O arquivo credentials.json é da etapa anterior.

  6. O comando gcloud abre uma janela de login da Conta do Google em uma nova janela do navegador e orienta você pelas etapas de autenticação do OAuth 2.0. Faça login como o usuário selecionado nas etapas anteriores. Se o app não for verificado, uma tela de aviso poderá aparecer. Nesses casos, é seguro clicar no link Mostrar avançado e na opção Acessar PROJECT_NAME (não verificado).

  7. Depois de verificar os escopos, clique no botão Continuar para conceder a permissão. O navegador navega até https://cloud.google.com/sdk/auth_success, indicando que a autenticação foi bem-sucedida. A página mostra a seguinte mensagem:

    Authorization code granted. Close this tab.

    O comando gcloud imprime a seguinte mensagem:

    Credentials saved to file: [/****/.config/gcloud/application_default_credentials.json]

    Agora abra o arquivo application_default_credentials.json. O conteúdo dele precisa ser semelhante a este:

    {
    "account": "",
    "client_id": "******.apps.googleusercontent.com",
    "client_secret": "******",
    "refresh_token": "******",
    "type": "authorized_user",
    "universe_domain": "googleapis.com"
    }
    

Configuração da biblioteca de cliente

Selecione a guia correspondente à sua linguagem de programação para instruções sobre como configurar a biblioteca de cliente.

Java

Configure as seguintes chaves no arquivo 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

Consulte o [guia de configuração][java-config-guide] para outras opções.

.NET

É possível inicializar a instância GoogleAdsClient no ambiente de execução usando as credenciais que você recebeu do usuário cujas contas estão fazendo chamadas de 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);

Consulte o [guia de configuração][dotnet-config-guide] para outras opções.

Python

Configure as seguintes chaves no arquivo 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

Consulte o [guia de configuração][python-config-guide] para outras opções.

PHP

Configure as seguintes chaves no arquivo 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"

Consulte o [guia de configuração][php-config-guide] para outras opções.

Ruby

Configure as seguintes chaves no arquivo [google_ads_config.rb][ruby-config-file].

  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

Consulte o [guia de configuração][ruby-config-guide] para outras opções.

Perl

Configure as seguintes chaves no arquivo 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
 

Consulte o [guia de configuração][perl-config-guide] para outras opções.

curl

Comece usando um cliente HTTP para buscar um token de acesso OAuth 2.0. Este guia usa o 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/token

Agora você pode usar o token de acesso nas chamadas de API. O exemplo a seguir mostra como executar um relatório de campanha usando o método GoogleAdsService.SearchStream para recuperar as campanhas na sua conta. Este guia não aborda os detalhes da geração de relatórios.

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"

O conteúdo de query.json é o seguinte:

{
  "query": "SELECT campaign.id, campaign.name, campaign.network_settings.target_content_network FROM campaign ORDER BY campaign.id"
}

[service-account-workflow]: /google-ads/api/docs/oauth/service-accounts [gcloud-cli]: https://cloud.google.com/sdk/gcloud [generate-user-credentials-example]: /google-ads/api/samples/generate-user-credentials [app-verification]: //support.google.com/cloud/answer/13461325 [2fa]: //support.google.com/google-ads/answer/12864186 [configure-oauth-consent]: /workspace/guides/configure-oauth-consent [create-credentials]: /workspace/guides/create-credentials#desktop-app [grant-access]: //support.google.com/google-ads/answer/6372672 [install-gcloud]: //cloud.google.com/sdk/docs/install [java-config-guide]: /google-ads/api/docs/client-libs/java/config-file [dotnet-config-guide]: /google-ads/api/docs/client-libs/dotnet/configuration [python-config-guide]: /google-ads/api/docs/client-libs/python/configuration [php-config-guide]: /google-ads/api/docs/client-libs/php/configuration [ruby-config-file]: //github.com/googleads/google-ads-ruby/blob/HEAD/google_ads_config.rb [ruby-config-guide]: /google-ads/api/docs/client-libs/ruby/configuration [perl-config-guide]: /google-ads/api/docs/client-libs/perl/configuration [oauth-playground]: /oauthplayground/ [playground-video]: //www.youtube.com/watch?v=KFICa7Ngzng