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

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

  • アプリで管理するすべての Google 広告アカウント へのアクセス権を 1 人のユーザーに付与します。
  • ユーザーは、Google 広告アカウントをアプリに代行管理させることを承認し、アプリにすべての Google 広告アカウントへのアクセス権を付与します。

ユーザーは 1 人だけなので、独自の OAuth 2.0 ユーザー認証フローを構築する代わりに、gcloud CLI や GenerateUserCredential code example などのツールを使用できます。

このワークフローの関連するユースケースは、少数のユーザー ログイン(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 認証の手順が表示されます。前の手順で選択したユーザーとしてログインしてください。アプリが 未確認の場合は、警告画面が表示されることがあります。その場合は、 [詳細] リンクをクリックし、[Go to 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/v26/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"
}