アプリケーション サーバーで reCAPTCHA express を設定する

reCAPTCHA JavaScript またはモバイル SDK とのクライアントサイド統合が不可能な場合(API エンドポイントの保護など)、アプリケーション サーバーに reCAPTCHA express を設定できます。

reCAPTCHA express は、クライアントサイド統合やクライアントサイド シグナルを使用せずに評価を作成できる機能です。reCAPTCHA express は、バックエンド シグナルのみを使用して reCAPTCHA リスクスコアを生成します。 このリスクスコアを使用して、リクエストを処理するか、チャレンジページにリダイレクトするか、後で分析するためにログに記録するかを決定できます。

始める前に

  1. コンソールのプロジェクト セレクタページで、プロジェクトを選択または作成します。 Google Cloud Google Cloud

    プロジェクトを選択または作成するために必要なロール

    • プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール (roles/resourcemanager.projectCreator)が必要です。これには resourcemanager.projects.create 権限が含まれています。詳しくは、ロールを付与する方法をご覧ください。

    プロジェクト セレクタに移動

    後で使用できるように、 Google Cloud プロジェクト ID を記録します。

  2. プロジェクトに対して課金が有効になっていることを確認します Google Cloud 。

  3. reCAPTCHA Enterprise API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。

    API の有効化

  4. 認証用の API キーを作成します。

    1. コンソールで、[認証情報] ページに移動します。 Google Cloud

      [認証情報] に移動

    2. [認証情報を作成] をクリックし、[API キー] を選択します。

    3. 後で使用できるように、API キーを記録します。

reCAPTCHA express キーを作成する

reCAPTCHA express を実装するには、reCAPTCHA express キーを作成します。

  1. コンソールで Cloud Shell をアクティブにします。 Google Cloud

    Cloud Shell をアクティブにする

    コンソールの下部にある Google Cloud Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です 。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています 。セッションが初期化されるまで数秒かかることがあります。

  2. gcloud

    reCAPTCHA キーを作成するには、gcloud recaptcha keys create コマンドを使用します。

    後述のコマンドデータを使用する前に、 次のように置き換えます。

    • INTEGRATION_TYPE: 統合のタイプ。 score を指定します。
    • DISPLAY_NAME: キーの名前。通常はサイトの名前です。

    gcloud recaptcha keys create コマンドを実行します。

    Linux、macOS、Cloud Shell

    gcloud recaptcha keys create \
    --express \
    --display-name=DISPLAY_NAME

    Windows(PowerShell)

    gcloud recaptcha keys create `
    --express `
    --display-name=DISPLAY_NAME

    Windows(cmd.exe)

    gcloud recaptcha keys create ^
    --express ^
    --display-name=DISPLAY_NAME

    レスポンスには、新しく作成された reCAPTCHA キーが含まれます。

    REST

    キーの種類と統合タイプに関する API リファレンス情報については、 統合タイプをご覧ください。

    リクエストのデータを使用する前に、 次のように置き換えます。

    • INTEGRATION_TYPE: 統合のタイプ。 score を指定します。
    • DISPLAY_NAME: キーの名前。通常はサイト名です。
    • DEFAULT_SCORE_THRESHOLD: ポリシーベースのチャレンジキーの場合、カスタム スコアのしきい値が定義されていないときに、キーのユニバーサル チャレンジのしきい値を定義します。これはプレビュー版です。
    • ACTION_SCORE_THRESHOLDS:ポリシーベースのチャレンジキーの場合、アクションと対応するしきい値スコアを 0.0 ~ 1.0 の範囲で指定します。たとえば、login='{"scoreThreshold": "0.3"}',signup='{"scoreThreshold": "0.1"}' のようにします。これはプレビュー版です。

    HTTP メソッドと URL:

    POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys

    リクエストの本文(JSON):

    
    {
      "displayName": "DISPLAY_NAME",
      "expressSettings": {}
    }
    
    

    リクエストを送信するには、次のいずれかのオプションを選択します。

    curl

    リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"

    PowerShell

    リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Content

    次のような JSON レスポンスが返されます。

    
    {
      "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m",
    "displayName": "DISPLAY_NAME,
    "expressSettings": {
    }
    }
    
    

後で使用するために、express キーを記録します。

評価の作成

アプリケーション サーバーから reCAPTCHA へのリクエストを行うには、projects.assessments.create メソッドを使用して評価を作成します。

リクエストのデータを使用する前に、次のように置き換えます。

  • API_KEY: 認証用に作成した API キー。
  • EXPRESS_KEY: アプリケーション用に作成した reCAPTCHA express キー。
  • USER_IP_ADDRESS: このイベントに関連するユーザーのデバイスからのリクエストに含まれる IP アドレス。
  • HEADER_INFO: 省略可。クライアントがアプリケーション サーバーに送信した HTTP ヘッダー。 これは、リクエスト ヘッダーが [key:value] 形式で格納された文字列配列です。たとえば、[key:value, key:value,...] のようになります。必要な順序でできるだけ多くのヘッダーを共有することをおすすめします。同じセッション内のすべてのリクエストでヘッダーの順序が一致していることを確認してください。
  • JA3_FINGERPRINT: 省略可。JA3 は、TLS クライアント hello パケットの特定のフィールドの MD5 フィンガープリントです。詳細については、JA3 - SSL/TLS クライアントのプロファイリング方法をご覧ください。
  • URI_NAME: 省略可。ユーザーによってアクセスされている URI。
  • USER_AGENT: 省略可。このイベントに関連するユーザーのデバイスからのリクエストに含まれるユーザー エージェント。
  • ACCOUNT_ID: 省略可。ハッシュ化されたアカウント名など、ユーザーのアカウントの一意で永続的な識別子。

HTTP メソッドと URL:

POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY

リクエストの本文(JSON):


{
  "event": {
    "siteKey": "EXPRESS_KEY",
    "express": true,
    "userIpAddress": "USER_IP_ADDRESS",
    "headers": ["HEADER_INFO"],
    "ja3": "JA3_FINGERPRINT",
    "requestedUri": "URI_NAME",
    "userAgent": "USER_AGENT",
    "user_info": {
      "account_id": "ACCOUNT_ID"
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$headers = @{  }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/123456789/assessments/abcdef1234000000",
  "event": {
    "token": "",
    "siteKey": "6L...",
    "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13816.55.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.86 Safari/537.36",
    "userIpAddress": "1.2.3.4",
    "express": true,
    "requestedUri": "https://example.com/",
    "user_info": {
      "account_id": "123456789"
    },
    "headers": [ "Origin: https://example.com", "Referer: https://example.com.login"],
  },
  "riskAnalysis": {
    "score": 0.7,
    "reasons": []
  }
}

スコアを解釈する

reCAPTCHA express は、0.30.7 の 2 つのスコアのみを返します。 0.3 は、ユーザー インタラクションのリスクが高く、不正行為の可能性が高いことを示します。0.7 は、ユーザー インタラクションのリスクが低く、正当である可能性が高いことを示します。

シグナルが不足している場合、reCAPTCHA express はデフォルトで 0.7 を返します。

次のステップ