シングル ユーザー認証のワークフロー

サービス アカウントのワークフローと同様に、シングル ユーザー認証フローでは、Google 広告の UI で提供される承認機能とユーザー管理機能を利用して、アプリに必要なすべてのアカウントへのアクセス権を付与します。この認証ワークフローには次の 2 つのステップがあります。

  • アプリで管理する必要があるすべての Google 広告アカウントへのアクセス権を 1 人のユーザーに付与します。
  • ユーザーがアプリに代行して Google 広告アカウントを管理する権限を付与すると、アプリはすべての Google 広告アカウントにアクセスできるようになります。

ユーザーが 1 人しか関与しないため、独自の OAuth 2.0 ユーザー認証フローを構築する代わりに、gcloud CLI や GenerateUserCredential コード例などのツールを使用できます。

このワークフローの関連するユースケースは、アカウントに少数のユーザー ログイン(3 ~ 4 人のユーザーなど)でアクセスできる場合です。この場合、gcloud CLI などのコマンドライン ツールを使用して 3 ~ 4 人のユーザーの承認を取得する労力と比較すると、本格的な OAuth マルチユーザー認証ワークフローを構築する開発労力は正当化されません。

デメリット

サービス アカウントのワークフローと比較すると、このフローにはいくつかの欠点があります。

  1. ユーザー認証ワークフローでは、Google Cloud コンソールで OAuth 2.0 クライアント ID とシークレットを作成する必要があります。これには、サービス アカウントとキーの作成よりも多くの構成手順が必要です。
  2. 承認済みユーザーがチームまたは会社を離れた場合、アカウントからユーザーを削除するか、ユーザー アカウントを無効にすると、アプリが動作しなくなることがあります。サービス アカウントは個々のユーザーに関連付けられていないため、このリスクは回避されます。
  3. Google 広告アカウントを承認するユーザーは、セキュリティの脆弱性、マルウェア、フィッシングによって Google アカウントが不正使用されるのを防ぐため、Google アカウントでパスキーを有効にする必要があります。パスキーを有効にするためにサービス アカウントは必要ありません。また、これらの攻撃モードの一部はサービス アカウントに直接適用されないため、サービス アカウントはこの問題の影響を受けにくいです。

認証情報を生成する

  1. アプリケーションの OAuth 同意画面を構成し、OAuth 2.0 スコープとして https://www.googleapis.com/auth/adwords を追加します。詳細については、OAuth 同意画面の設定をご覧ください。

  2. 手順に沿って、クライアント ID とクライアント シークレットを作成します。OAuth 2.0 クライアントを作成したら、確認ダイアログの [JSON をダウンロード] ボタンをクリックして、クライアントの JSON ファイルをダウンロードします。ファイルを credentials.json として保存します。

  3. アプリを使用して管理するすべての Google 広告アカウントにアクセスできるユーザー アカウントを特定します。アクセス権がないアカウントがある場合は、そのユーザーにアカウントのアクセス権を付与します。

  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
    
  5. 前の手順の credentials.json ファイルを使用して gcloud CLI ツールを実行し、OAuth 2.0 更新トークンを生成します。更新トークンが gcloud CLI のデフォルト プロジェクトではなく、Google API Console プロジェクトで発行されるようにするには、--client-id-file を渡す必要があります。

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

クライアント ライブラリの構成

クライアント ライブラリの構成方法については、プログラミング言語に対応するタブを選択してください。承認済みユーザーが Google 広告クライアント センター(MCC)アカウントを介してクライアント アカウントにアクセスする場合は、login-customer-id(または loginCustomerId)を、そのクライアント センター(MCC)アカウントの 10 桁のお客様 ID(ハイフンなし)に設定します。

Java

ads.properties ファイルで次のキーを構成します。

api.googleads.clientId=INSERT_OAUTH2_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_OAUTH2_CLIENT_SECRET_HERE
api.googleads.refreshToken=INSERT_OAUTH2_REFRESH_TOKEN_HERE
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

その他のオプションについては、構成ガイドをご覧ください。

.NET

GoogleAdsConfig インスタンスに OAuth 2.0 認証情報を設定し、それを使用して GoogleAdsClient オブジェクトを初期化します。

GoogleAdsConfig config = new GoogleAdsConfig()
{
    OAuth2Mode = OAuth2Flow.APPLICATION,
    OAuth2ClientId = "INSERT_OAUTH2_CLIENT_ID_HERE",
    OAuth2ClientSecret = "INSERT_OAUTH2_CLIENT_SECRET_HERE",
    OAuth2RefreshToken = "INSERT_OAUTH2_REFRESH_TOKEN_HERE",
    LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE",
};
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_OAUTH2_REFRESH_TOKEN_HERE
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
use_proto_plus: True

その他のオプションについては、構成ガイドをご覧ください。

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_OAUTH2_CLIENT_ID_HERE'
  c.client_secret = 'INSERT_OAUTH2_CLIENT_SECRET_HERE'
  c.refresh_token = 'INSERT_OAUTH2_REFRESH_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://oauth2.googleapis.com/token

API 呼び出しでアクセス トークンを使用できます。次の例は、GoogleAdsService.SearchStream メソッドを使用してアカウント内のキャンペーンを取得し、キャンペーン レポートを実行する方法を示しています。このガイドでは、レポートの詳細については説明しません。

curl -i -X POST \
  https://googleads.googleapis.com/v25/customers/CUSTOMER_ID/googleAds:searchStream \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ACCESS_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"
}