新しくなった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 init
とgcloud 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
コメント