新しいreCAPTCHA (Google Cloud) をPHPで実装してみた

新しくなったreCAPTCHA (Google Cloud) を、自前で実装してみた。
reCAPTCHAを自前で実装すること自体が初めてなので、学んだことをまとめた。

reCAPTCHAキーの作成

まずはGoogle CloudコンソールでreCAPTCHAのキーを作成する。
ドメインを指定し、プラットフォームは「ウェブサイト」を選択する。

「キーの詳細」>「システム開発」のページが開くので、指示に従ってフロントエンドとバックエンドの実装をする。

実装上のハマりポイント

フロントエンドの実装は指示通りの実装で動くが、
PHPのバックエンドに関してはドキュメントの更新が滞っているのか、実情と異なる部分もある。
困った時はライブラリ公式GitHubのサンプルコードを見ると良い。

まずcomposerでライブラリをインストールする。

$ composer require google/cloud-recaptcha-enterprise

まずRecaptchaEnterpriseServiceClientだが、パスが変わっていてClient/付きが正解。

// use Google\Cloud\RecaptchaEnterprise\V1\RecaptchaEnterpriseServiceClient;
use Google\Cloud\RecaptchaEnterprise\V1\Client\RecaptchaEnterpriseServiceClient;

createAssessment()の引数はCreateAssessmentRequestに変わっている。

use Google\Cloud\RecaptchaEnterprise\V1\CreateAssessmentRequest;

// ...省略...

  $request = (new CreateAssessmentRequest())
    ->setParent($projectName)
    ->setAssessment($assessment);

  $response = $client->createAssessment($request);

ADC認証(ローカルDocker開発環境)

Google Cloud CLIを使用しろとのことなので、Dockerfileを編集して使えるようにする。

FROM php:8.2-apache

# Google Cloud CLI
RUN apt-get install -y apt-transport-https ca-certificates gnupg curl
RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg && apt-get update -y && apt-get install google-cloud-cli -

# NOTE: デフォルトの構成ディレクトリ /root/.config/gcloud にPHPから参照できないため、パスを変更
# https://cloud.google.com/sdk/docs/configurations?hl=ja
ENV CLOUDSDK_CONFIG=/var/www/.config/gcloud
ENV GOOGLE_APPLICATION_CREDENTIALS=/var/www/.config/gcloud/application_default_credentials.json

gcloud initgcloud auth application-default loginを実行し、ブラウザでログインすればOK。

ADC認証(サーバーデプロイ)

今回はサービスアカウントを作成して対応。
ロールは「reCAPTCHA Enterprise エージェント」を設定する。

サービスアカウントの詳細画面を開いたら「鍵」タブに移動し、
「キーを追加」からJSONキーをダウンロードする。

サーバー上の外部からアクセスできない場所にJSONキーを保存し、GOOGLE_APPLICATION_CREDENTIALS環境変数でキーの保存場所を設定する。

Apacheのvhost設定ファイルの例:

SetEnv GOOGLE_APPLICATION_CREDENTIALS "/path/to/json-key.json"

Apacheを再起動して反映する。

例:

sudo /opt/bitnami/ctlscript.sh restart apache

参考

関連記事

コメント

この記事へのコメントはありません。

TOP