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

> Auth0 のカスタムドメインプロキシとして使用する Cloudflare の設定方法を学びます。

# Cloudflare をリバースプロキシとして設定する

<Card title="利用可否は Auth0 のプランによって異なります">
  この機能を利用できるかどうかは、Auth0 のプランまたは個別契約の内容によって異なります。詳しくは、[Auth0 の料金ページ](https://auth0.com/pricing)をご覧ください。
</Card>

推奨される方法で Cloudflare をリバースプロキシとして設定するには、以下の機能を備えた Cloudflare Enterprise プランが必要です。

| 機能 | 説明 |
| - | - |
| Host Header Override | Cloudflare の各種ルールを使用して Host ヘッダーを書き換えます。詳しくは、[Cloudflare Docs の Rewrite Host headers](https://developers.cloudflare.com/rules/origin-rules/tutorials/change-uri-path-and-host-header/)をご覧ください。 |
| True-Client-IP Header | True-Client-IP Header を有効にすると、オリジンサーバーへのすべてのリクエストに、エンドユーザーの IP アドレスを含む True-Client-IP ヘッダーが追加されます。詳しくは、[Cloudflare の Understanding the True-Client-IP Header](https://developers.cloudflare.com/network/true-client-ip-header/)をご覧ください。 |

<h2 id="configure-cloudflare">
  Cloudflare を設定する
</h2>

<Warning>
  前提条件として、選択したカスタムドメインの親ドメインが [Cloudflare ダッシュボードで追加され、有効化されている](https://developers.cloudflare.com/learning-paths/get-started/add-domain-to-cf/minimize-downtime/#activate-your-domain) 必要があります。また、使用したいカスタムドメインが Cloudflare ゾーン内にまだ存在していないことも確認してください。すでに存在している場合、Cloudflare の検証は失敗します。
</Warning>

Cloudflare をリバースプロキシとして設定するには、Cloudflare で CNAME レコード、Page Rule、Transform Rule を作成する必要があります。

1. まだ実施していない場合は、[自己管理証明書を使用してカスタムドメインを設定および検証](/docs/ja-jp/customize/custom-domains/self-managed-certificates) します。後で必要になるため、**Origin Domain Name** と **cname-api-key** の値を控えておいてください。
2. 対象ゾーンの Cloudflare ダッシュボードで、次の設定を使用して [CNAME レコードを作成](https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/#create-dns-records) します。

   | 設定 | 値 |
   | - | - |
   | Name | カスタムドメイン名 |
   | Target | 先ほど控えた **Origin Domain Name** の値 |
   | Proxy Status | `Proxied` |
3. 選択したカスタムドメイン配下のすべての URL を対象に、次の設定で [Page Rule を作成](https://developers.cloudflare.com/rules/page-rules/) します。

   | 設定 | 値 |
   | - | - |
   | Host Header Override | 先ほど控えた **Origin Domain Name** の値 |
   | True-Client-IP | `Enable` |
4. [Transform Rule を作成](https://developers.cloudflare.com/rules/transform/request-header-modification/create-dashboard/) します。

   <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
     自己管理証明書のカスタムドメインの要件を満たすリバースプロキシを設定するために、Page Rule や Transform Rule の代わりに Cloudflare Workers を使用することもできますが、カスタムコードが不要になるため、ルールベースの方法を推奨します。
   </Callout>

   1. **Modify Request Header** ビューに切り替えます。
   2. **Create Rule** を選択し、任意の名前を入力します。
   3. **When incoming requests match** で **Custom filter expression** を選択し、選択したカスタムドメインに関連するリクエストだけを対象にする式を設定します。たとえば、**Hostname** フィールドの完全一致を使用します。
   4. **Modify request header** で **Set static** を選択し、次のフィールドを設定します。

      | 項目 | 値 |
      | - | - |
      | Header name | `cname-api-key` |
      | Value | 先ほど控えた **cname-api-key** の値 |
5. 選択したカスタムドメインで、[Always Use HTTPS](https://developers.cloudflare.com/ssl/edge-certificates/additional-options/always-use-https/) が有効になっており、[encryption mode](https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/) が少なくとも **Full** に設定されていることを確認します。

<h2 id="use-managed-challenges">
  Managed Challenges を使用する
</h2>

Cloudflare の [Managed Challenges](https://developers.cloudflare.com/cloudflare-challenges/challenge-types/challenge-pages/#managed-challenges) を使用すると、リクエストが Auth0 Universal Login に到達する前にボットトラフィックをフィルタリングできます。リクエストがルールに一致すると、Cloudflare がそれをインターセプトし、検証用の challenge を表示します。challenge ページは HTML を返すため、Managed Challenges はブラウザベースのフローでのみ使用できます。これを API エンドポイントやヘッドレスフローに適用すると、client は想定されたレスポンスではなく HTML の challenge ページを受け取ってしまうため、それらのフローは機能しなくなります。

<h3 id="universal-login-browser-based-endpoints">
  Universal Login のブラウザーベースのエンドポイント
</h3>

以下のエンドポイントはブラウザーに HTML ページを返し、Managed Challenges に対応しています。

| Endpoint | Description |
| - | - |
| `/u/email-verification` | メールアドレス確認 |
| `/u/login` | identifier および identifier-first プロンプト |
| Organization endpoints: <br /><ul><li>`u/organization`</li><li>`/u/organization-picker`</li><li>`/u/pre-organization-picker`</li></ul> | organization 選択プロンプト |
| `/u/login/password` | パスワードプロンプト |
| `/u/login-email-verification` | メールアドレス確認プロンプト |
| `/u/signup` | identifier プロンプト |
| `/u/signup/password` | パスワードプロンプト |
| `/u/consent` | 同意プロンプト |
| `/u/customized-consent` | カスタマイズされた同意プロンプト |
| `/u/reset-password` | パスワードリセットプロンプト |
| `/u/reset-password/request` | パスワードリセット用のメールアドレス/ユーザー名プロンプト |
| `/u/reset-password/change` | 新しいパスワードのプロンプト |
| `/u/reset-verify` | パスワードリセットの確認 |
| `/u/mfa-begin-enroll-options` | MFA 登録の認証要素選択 |
| `/u/mfa-enroll-options` | MFA 登録オプション |
| `/u/mfa-otp` | ワンタイムパスワード プロンプト |
| `/u/mfa-push` | プッシュ通知プロンプト |
| `/u/mfa-webauthn` | WebAuthn およびパスキープロンプト |
| `/u/mfa-recovery-code` | リカバリーコード プロンプト |
| `/u/mfa-sms` | SMS プロンプト |
| `/u/mfa-email` | MFA メールプロンプト |
| `/u/mfa-voice` | MFA 音声プロンプト |
| `/u/passkey-enrollment` | パスキー登録 |

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Classic Universal Login を使用している場合は、Managed Challenge ルールに `/login` も含めてください。
</Callout>

<h3 id="endpoints-to-exclude">
  除外するエンドポイント
</h3>

以下のエンドポイントには Managed Challenge を適用しないでください。これらはサーバー、SDK、またはリソースサーバーから呼び出されるため、対話型チャレンジには対応できません。

| エンドポイント | 説明 |
| - | - |
| `/oauth/token` | トークンエンドポイント |
| `/oauth/revoke` | トークン取り消しエンドポイント |
| `/userinfo` | UserInfo エンドポイント |
| `/.well-known/openid-configuration` | OIDC ディスカバリー ドキュメント |
| `/.well-known/jwks.json` | JSON Web Key Set。リソースサーバーがトークン検証のために取得します |
| `/api/v2/*` | Management API |
| `/co/authenticate` | クロスオリジン認証 |
| `/dbconnections/signup` | データベース接続: サインアップ |
| `/dbconnections/change_password` | データベース接続: パスワード変更 |
| `/usernamepassword/login` | Classic Universal Login フォーム送信 |
| `/mfa/challenge` | チャレンジリクエスト |
| `/mfa/associate` | 認証器の関連付け |
| `/passwordless/start` | パスワードレス: 開始リクエスト |
| `/samlp/*` | SAML プロトコル エンドポイント |
| `/wsfed/*` | WS-Federation エンドポイント |
| `/v2/logout` | back-channel logout フローではサーバー側から呼び出される場合があります |

<h3 id="example-rule">
  ルールの例
</h3>

Managed Challenge をブラウザベースの Universal Login フローにのみ適用するには、Cloudflare で [WAF Custom Rule](https://developers.cloudflare.com/waf/custom-rules/) を作成します。ルールのアクションを **Managed Challenge** に設定し、次の式を使用して、`YOUR_CUSTOM_DOMAIN` をカスタムドメイン (たとえば `login.example.com`) に置き換えてください。

```text theme={null}
(http.host eq "YOUR_CUSTOM_DOMAIN" and (
  http.request.uri.path eq "/authorize" or
  starts_with(http.request.uri.path, "/u/") or
  http.request.uri.path eq "/login"
))
```

これにより、チャレンジの適用対象を画面表示を伴う Universal Login エンドポイントのみに絞り、API や machine-to-machine のトラフィックへの影響を防げます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  一部のユースケースでは、動作が異なる場合があります。

  * **クリアランス Cookie の保持**: ブラウザーが Managed Challenge を通過すると、Cloudflare は通常、セッション中有効なクリアランス Cookie を発行します。設定によっては、ルールの対象を `/authorize` のみに絞るだけで、すべての `/u/*` パスに適用しなくても Universal Login フロー全体をカバーするのに十分な場合があります。
  * **OAuth 以外のエントリポイント**: SAML の SP 起点または WS-Federation のエントリポイントから開始するフローでは、`/authorize` ではなく `/samlp/*` または `/wsfed/*` が使用されます。これらのパスは除外リストに含まれているため、Managed Challenge を適用しないでください。
</Callout>

<h2 id="configure-auth0">
  Auth0 を設定する
</h2>

Auth0 の <Tooltip tip="Management API: お客様が管理タスクを実行できるようにする製品です。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Management+API">Management API</Tooltip> の [カスタムドメイン設定を更新](https://auth0.com/docs/api/management/v2#!/Custom_Domains/patch_custom_domains_by_id) エンドポイントを呼び出し、リクエストボディに次のペイロードを指定します。

```json lines theme={null}
{
  "custom_client_ip_header": "true-client-ip"
}
```

これにより、Auth0 は HTTP ヘッダー `true-client-ip` からエンドユーザーの IP アドレスを取得するように設定されます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  必ず `true-client-ip` を使用してください。この目的で HTTP ヘッダー `cf-connecting-ip` を使用することは、Cloudflare ではサポートされていません。
</Callout>

<h2 id="learn-more">
  詳細はこちら
</h2>

* [カスタムドメインを使用する機能を設定する](/docs/ja-jp/customize/custom-domains/configure-features-to-use-custom-domains)
* [TLS (SSL) のバージョンと暗号スイート](/docs/ja-jp/customize/custom-domains/self-managed-certificates/tls-ssl)
