単一ユーザー認証のワークフロー

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

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

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

このワークフローの関連ユースケースとして、アカウントに少数のユーザー ログイン(3 ~ 4 人のユーザーなど)でアクセスできるため、完全な OAuth ユーザー認証ワークフローを構築する開発作業が、gcloud CLI などのコマンドライン ツールを使用して 3 ~ 4 人のユーザーの認可を取得する作業と比較して正当化されない場合があります。

デメリット

サービス アカウントのワークフローと比較すると、このフローには次のような欠点があります。

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

認証情報を生成する

  1. 手順に沿って、アプリケーションの OAuth 同意画面を構成し、https://www.googleapis.com/auth/adwords を OAuth 2.0 スコープとして追加します。

  2. 手順に沿って、クライアント ID とクライアント シークレットを作成します。OAuth 2.0 クライアントを作成したら、まず [OAuth クライアントをダウンロード] アイコンをクリックし、次の画面で [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
    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

API 呼び出しを行うアカウントのユーザーから取得した認証情報を使用して、実行時に GoogleAdsClient インスタンスを初期化できます。

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