Proces uwierzytelniania pojedynczego użytkownika

Podobnie jak w przypadku [przepływu pracy z kontem usługi][service-account-workflow], przepływ uwierzytelniania pojedynczego użytkownika korzysta z funkcji autoryzacji i zarządzania użytkownikami oferowanych przez interfejs Google Ads, aby przyznać aplikacji dostęp do wszystkich niezbędnych kont. Ten proces uwierzytelniania składa się z 2 etapów:

  • Przyznajesz jednemu użytkownikowi dostęp do wszystkich kont Google Ads, którymi ma zarządzać aplikacja.
  • Użytkownik autoryzuje aplikację do zarządzania jego kontami Google Ads w jego imieniu, przyznając jej w ten sposób dostęp do wszystkich kont Google Ads.

Ponieważ jest tylko jeden użytkownik, zamiast tworzyć własny proces uwierzytelniania użytkownika OAuth 2.0, możesz użyć narzędzi takich jak [gcloud CLI][gcloud-cli] lub [przykładowy kod GenerateUserCredential][generate-user-credentials-example].

Podobny przypadek użycia tego procesu to sytuacja, w której do kont można uzyskać dostęp za pomocą kilku loginów użytkowników (np. 3–4 użytkowników), więc nakład pracy związany z opracowaniem pełnego procesu uwierzytelniania użytkowników OAuth nie jest uzasadniony w porównaniu z nakładem pracy związanym z uzyskaniem autoryzacji dla 3–4 użytkowników za pomocą narzędzia wiersza poleceń, takiego jak gcloud CLI.

Wady

W porównaniu z przepływem dotyczącym konta usługi ten przepływ ma kilka wad:

  1. Przepływ pracy uwierzytelniania użytkownika wymaga utworzenia identyfikatora klienta i klucza tajnego OAuth 2.0 w konsoli Google Cloud, co wymaga więcej kroków konfiguracji niż utworzenie konta usługi i klucza.
  2. Twoja aplikacja może wymagać dodatkowego [procesu weryfikacji aplikacji Google Cloud][app-verification].
  3. Jeśli upoważniony użytkownik opuści zespół lub firmę, aplikacja może przestać działać, jeśli usuniesz go z kont lub wyłączysz jego konto. Konta usługi nie są powiązane z konkretnymi użytkownikami, więc to ryzyko jest wyeliminowane.
  4. Użytkownik autoryzujący konto Google Ads powinien zachować szczególną ostrożność, np. [włączyć uwierzytelnianie dwuskładnikowe][2fa], aby chronić swoje konto Google przed przejęciem z powodu słabych zabezpieczeń, złośliwego oprogramowania lub wyłudzania informacji. Konta usług są mniej podatne na ten problem, ponieważ niektóre z tych sposobów ataku nie mają do nich bezpośredniego zastosowania.

Generowanie danych logowania

  1. Postępuj zgodnie z [instrukcjami][configure-oauth-consent], aby skonfigurować ekran zgody OAuth dla aplikacji i dodać https://www.googleapis.com/auth/adwords jako zakres OAuth 2.0. Szczegółowe informacje znajdziesz w artykule Konfigurowanie ekranu zgody OAuth.

  2. Utwórz identyfikator klienta i tajny klucz klienta, postępując zgodnie z [instrukcjami][create-credentials]. Po utworzeniu klienta OAuth 2.0 pobierz plik JSON klienta. W tym celu najpierw kliknij ikonę Pobierz klienta OAuth, a potem przycisk POBIERZ JSON na następnym ekranie. Zapisz plik jako credentials.json.

  3. Wskaż konto użytkownika, które ma dostęp do wszystkich kont Google Ads, którymi chcesz zarządzać za pomocą aplikacji. Jeśli brakuje dostępu do niektórych kont, postępuj zgodnie z [instrukcjami][grant-access], aby przyznać niezbędne uprawnienia.

  4. [Pobierz i zainstaluj][install-gcloud] gcloud CLI. Po zainstalowaniu sprawdź, czy narzędzie działa prawidłowo, uruchamiając polecenie gcloud version w wierszu poleceń. Dane wyjściowe mogą wyglądać tak:

    :~$ 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. Wygeneruj token odświeżania OAuth 2.0, uruchamiając narzędzie gcloud CLI:

    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>

    Plik credentials.json pochodzi z poprzedniego kroku.

  6. Polecenie gcloud otwiera okno logowania na konto Google w nowym oknie przeglądarki i przeprowadza Cię przez proces uwierzytelniania OAuth 2.0. Zaloguj się jako użytkownik wybrany w poprzednich krokach. Jeśli aplikacja jest niezweryfikowana, może pojawić się ekran ostrzeżenia. W takich przypadkach możesz bezpiecznie kliknąć link Pokaż zaawansowane i opcję Przejdź do PROJECT_NAME (niezweryfikowano).

  7. Po sprawdzeniu zakresów kliknij przycisk Dalej, aby przyznać uprawnienia. Przeglądarka przechodzi na stronę https://cloud.google.com/sdk/auth_success, co oznacza, że uwierzytelnianie zakończyło się powodzeniem. Na stronie pojawi się ten komunikat:

    Authorization code granted. Close this tab.

    Polecenie gcloud wyświetla ten komunikat:

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

    Teraz otwórz plik application_default_credentials.json. Jego zawartość powinna być podobna do tej:

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

Konfiguracja biblioteki klienta

Aby uzyskać instrukcje konfigurowania biblioteki klienta, wybierz kartę odpowiadającą Twojemu językowi programowania.

Java

Skonfiguruj te klucze w pliku 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

Więcej opcji znajdziesz w [przewodniku po konfiguracji][java-config-guide].

.NET

Instancję GoogleAdsClient możesz zainicjować w czasie działania programu, używając danych logowania uzyskanych od użytkownika, którego konta są używane do wywoływania interfejsu 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);

Więcej opcji znajdziesz w [przewodniku po konfiguracji][dotnet-config-guide].

Python

Skonfiguruj te klucze w pliku 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

Więcej opcji znajdziesz w [przewodniku po konfiguracji][python-config-guide].

PHP

Skonfiguruj te klucze w 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"

Więcej opcji znajdziesz w [przewodniku po konfiguracji][php-config-guide].

Ruby

Skonfiguruj te klucze w pliku [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

Więcej opcji znajdziesz w [przewodniku po konfiguracji][ruby-config-guide].

Perl

Skonfiguruj te klucze w pliku 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
 

Więcej opcji znajdziesz w [przewodniku po konfiguracji][perl-config-guide].

curl

Zacznij od pobrania tokena dostępu OAuth 2.0 za pomocą klienta HTTP. W tym przewodniku używamy polecenia 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

Teraz możesz używać tokena dostępu w wywołaniach interfejsu API. Poniższy przykład pokazuje, jak uruchomić raport kampanii za pomocą metody GoogleAdsService.SearchStream, aby pobrać kampanie na koncie. Ten przewodnik nie zawiera szczegółowych informacji o raportowaniu.

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"

Zawartość pliku query.json jest następująca:

{
  "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