> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# reCAPTCHA

> Kubernetes デプロイで、ログイン、登録、パスワードリセットを Google reCAPTCHA で保護します。

**web** サービス（`login-register` モジュール）は、メールログイン、LDAP ログイン、登録、パスワードリセットの際に reCAPTCHA v2（invisible）を要求します。キーの作成方法と各設定の役割は [reCAPTCHA](https://ayakaleaf-pro.mintlify.site/ja/on-premises/configuration/overleaf-toolkit/authentication/recaptcha.md) を参照してください。このページでは、それを Kubernetes に設定する方法を説明します。

| | |
| - | - |
| サービス | web、すべての Ayakaleaf Pro Pod 内。web の起動時に読み込まれます |
| Pod → Google | `RECAPTCHA_ENDPOINT`（デフォルトは `https://www.google.com/recaptcha/api/siteverify`）、チェック対象のリクエストごと |
| ブラウザ → Google | `www.recaptcha.net` のウィジェットスクリプト |
| 状態 | Redis 内のレート制限。「このブラウザはすでに通過済み」というデバイス履歴は暗号化された Cookie 内 |
| 定期ジョブ | なし |

### 設定

**1. サイトキーを ConfigMap に設定する**

```yaml theme={null}
  RECAPTCHA_SITE_KEY: <site key>
  # optional
  # RECAPTCHA_ENDPOINT: https://www.recaptcha.net/recaptcha/api/siteverify
  # CAPTCHA_TRUSTED_USERS: robot@example.com
```

サイトキーは公開情報です。すべてのログインページに表示されます。

**2. シークレットキーとデバイス履歴キーを Secret に設定する**

```bash theme={null}
kubectl -n overleaf patch secret overleaf-secrets --type merge -p '{"stringData":{
  "RECAPTCHA_SECRET_KEY":"<secret key>",
  "DEVICE_HISTORY_SECRET":"'"$(openssl rand -hex 32)"'"}}'
```

両方のキーを一緒に設定してください。サイトキーがあってシークレットキーがない場合、すべてのチェックが失敗し、誰もパスワードでのログイン、登録、パスワードのリセットができなくなります。`DEVICE_HISTORY_SECRET` は 64 文字の 16 進数である必要があります。コンテナはこれを自動生成しません。

**3. 適用して再起動する**

```bash theme={null}
kubectl apply -f 30-config.yaml
kubectl -n overleaf rollout restart deployment/overleaf     # or statefulset/overleaf
```

次に、すべての Pod がエンドポイントに到達できることを確認します。Pod は接続試行ごとに約 1 秒で諦め、チェックを実行できなかったログインはエラーで失敗します。

```bash theme={null}
for p in $(kubectl -n overleaf get pod -l app=overleaf -o name); do   # app=overleaf-ha for several replicas
  kubectl -n overleaf exec "$p" -- curl -sS -o /dev/null -w "$p %{http_code}\n" \
    https://www.google.com/recaptcha/api/siteverify
done
```

### 複数のレプリカ

すべてのレプリカで `DEVICE_HISTORY_SECRET` を共有する必要があります。Secret に格納していれば共有されます。値が異なると、あるレプリカで通過したブラウザが別のレプリカで再びキャプチャを求められます。レート制限は、すべてのレプリカをまたいで Redis でカウントされます。

### Kubernetes でのテスト結果

Google の検証エンドポイントのモック（`overleaf-certs` の `NODE_EXTRA_CA_CERTS` を通じて信頼）に対して、Kubernetes 1.37 上で reCAPTCHA のエンドツーエンドテストに合格しました（13 ケース）。レプリカ 1 つでは、ログイン、登録、パスワードリセットのそれぞれについて、キャプチャなしまたは失敗したキャプチャでは拒否され、通過したキャプチャでは受け付けられること、`DEVICE_HISTORY_SECRET` によるデバイス履歴でブラウザがキャプチャをスキップできること、`CAPTCHA_TRUSTED_USERS` を確認しました。HAProxy の背後の 3 つのレプリカでは、キャプチャ付きの LDAP ログインを確認しました。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.