單一使用者驗證工作流程

服務帳戶工作流程類似,單一使用者驗證流程會使用 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 範圍。

  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/v21/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"
}