單一使用者驗證工作流程

服務帳戶工作流程類似,單一使用者驗證流程會使用 Google Ads 使用者介面提供的授權和使用者管理功能,授予應用程式存取所有必要帳戶的權限。這個驗證工作流程包含兩個步驟:

  • 您將所有應由應用程式管理的 Google Ads 帳戶存取權授予單一使用者。
  • 使用者授權應用程式代為管理 Google Ads 帳戶,因此應用程式可以存取所有 Google Ads 帳戶。

由於只涉及一位使用者,因此您可以依賴 gcloud CLIGenerateUserCredential 程式碼範例等工具,而不必自行建構 OAuth 2.0 使用者驗證流程。

這個工作流程的相關用途是,當您的帳戶可透過少數使用者登入 (例如 3 到 4 位使用者) 存取時,相較於使用 gcloud CLI 等指令列工具,為 3 到 4 位使用者取得授權所花費的力氣,建構完整的 OAuth 使用者驗證工作流程並不划算。

缺點

與服務帳戶工作流程相比,這個流程有幾個缺點:

  1. 使用者驗證工作流程需要在 Google Cloud 控制台中建立 OAuth 2.0 用戶端 ID 和密鑰,因此設定步驟比建立服務帳戶和金鑰更多。
  2. 應用程式可能必須完成額外的 Google Cloud 應用程式驗證程序
  3. 如果授權使用者離開團隊或公司,當您從帳戶中移除該使用者或停用使用者帳戶時,應用程式可能會停止運作。服務帳戶不會與個別使用者建立關聯,因此可避免這類風險。
  4. 授權 Google Ads 帳戶的使用者應採取額外防護措施,例如啟用雙重驗證,避免 Google 帳戶因安全性不佳、遭惡意軟體入侵或網路釣魚而遭到盜用。服務帳戶較不容易受到這個問題影響,因為部分攻擊模式不直接適用於服務帳戶。

產生憑證

  1. 按照操作說明,為應用程式設定 OAuth 同意畫面,並新增 https://www.googleapis.com/auth/adwords 做為 OAuth 2.0 範圍。詳情請參閱「設定 OAuth 同意畫面」。

  2. 按照操作說明建立用戶端 ID 和用戶端密鑰。建立 OAuth 2.0 用戶端後,請先點選用戶端的「下載 OAuth 用戶端」圖示,然後在下一個畫面點選「下載 JSON」按鈕,即可下載用戶端的 JSON 檔案。將檔案儲存為 credentials.json

  3. 找出可存取所有要透過應用程式管理的 Google Ads 帳戶的使用者帳戶。如有帳戶缺少存取權,請按照操作說明授予必要存取權。

  4. 下載並安裝 gcloud CLI。安裝完成後,請從指令列提示執行 gcloud version 指令,確認工具運作正常。輸出內容可能如下所示。

    :~$ 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. 執行 gcloud CLI 工具,產生 OAuth 2.0 更新權杖:

    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>

    credentials.json 檔案來自上一個步驟。

  6. gcloud 指令會在新的瀏覽器視窗中開啟 Google 帳戶登入視窗,並引導您完成 OAuth 2.0 驗證步驟。請務必以您在上一個步驟中選取的使用者身分登入。如果應用程式未經驗證,您可能會看到警告畫面。在這種情況下,請放心點選「顯示進階選項」連結,然後點選「前往 PROJECT_NAME (未經驗證)」選項。

  7. 確認範圍後,按一下「繼續」按鈕授予權限。瀏覽器會導向 https://cloud.google.com/sdk/auth_success,表示驗證成功。頁面會顯示下列訊息:

    Authorization code granted. Close this tab.

    gcloud 指令會列印下列訊息:

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

    現在開啟 application_default_credentials.json 檔案。內容應類似於下列項目:

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

用戶端程式庫設定

選取程式設計語言對應的分頁,查看如何設定用戶端程式庫的說明。

Java

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

如需其他選項,請參閱設定指南

.NET

您可以在執行階段初始化 GoogleAdsClient 執行個體,方法是使用從使用者取得的憑證,並透過這些憑證對帳戶發出 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);

如需其他選項,請參閱設定指南

Python

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

如需其他選項,請參閱設定指南

PHP

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"

如需其他選項,請參閱設定指南

Ruby

google_ads_config.rb 檔案中設定下列鍵。

  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

如需其他選項,請參閱設定指南

Perl

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
 

如需其他選項,請參閱設定指南

curl

首先,請使用 HTTP 用戶端擷取 OAuth 2.0 存取權杖。本指南使用 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

現在您可以在 API 呼叫中使用存取權杖。以下範例說明如何使用 GoogleAdsService.SearchStream 方法,擷取帳戶中的廣告活動,並執行廣告活動報表。本指南不會說明報表的詳細資訊。

curl -i -X POST https://googleads.googleapis.com/v22/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"

query.json 的內容如下:

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