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

> Auth0 を使用してマルチテナントアプリケーションを保護するためのベストプラクティスについて説明します。

# マルチテナントアプリケーションのベストプラクティス

マルチテナンシーは、サーバー上で稼働する単一のソフトウェアインスタンスを複数のユーザーグループで共有するアーキテクチャ方式です。マルチテナンシーでは、共通の特性を持つユーザーをグループごとに分け、それぞれに個別の権限やアプリケーションへのアクセスレベルを付与できます。これにより、異なる顧客、事業部門、その他の定義済みユーザーグループごとに、最適化された体験を作成し、維持できます。

Auth0 でマルチテナンシーを実装する最適な方法は、[Auth0 Organizations](/docs/ja-jp/manage-users/organizations/organizations-overview) を使用することです。必要に応じて、個別のビジネスユースケースに対応するために、従来の別のソリューションを使用することもできます。[business-to-business (B2B)](/docs/ja-jp/get-started/architecture-scenarios/business-to-business) の製品やサービスを提供している場合は、ビジネスユーザー向けにマルチテナンシーを設定することが、ユースケースによっては有効です。

以下のセクションでは、Auth0 でマルチテナンシーを実装するために利用できるオプションについて説明します。

<Warning>
  この記事では、「tenant」を、アプリケーションにアクセスできるユーザーグループを指すソフトウェアアーキテクチャ用語として使用しています。Auth0 のインスタンスを指す場合は、「Auth0 tenant」という用語を使用します。
</Warning>

<div id="auth0-organizations">
  ## Auth0 Organizations
</div>

ほとんどのマルチテナントのユースケースでは、Auth0 Organizations は、お客様とユーザーにとって最適なソリューションです。Auth0 Organizations は、エンドユーザーがアクセスできる 1 つ以上のアプリケーションを持つ B2B 実装をサポートします。

B2B 実装に共通する特徴には、次のようなものがあります。

* 他社の従業員による利用を目的として、その企業にライセンス提供される製品。
* 認証体験において、それぞれ独自のフェデレーションと簡易的なブランディングを必要とする複数の組織。
* 異なるユーザーグループごとに異なるアプリケーションアクセスレベル。

Auth0 Organizations を使用すると、個別のユーザーグループを作成し、[ロールベースのアクセス制御](/docs/ja-jp/manage-users/access-control/rbac)、[カスタマイズされたログインページとメールテンプレート](/docs/ja-jp/manage-users/organizations/create-first-organization#customize-prompts-and-email-templates) などを使って、それぞれに合わせた体験を提供できます。

Auth0 Organizations を使用してマルチテナンシーを実装する方法の詳細については、[Multiple Organization Architecture](/docs/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture) を参照してください。

<div id="legacy-solutions">
  ## レガシーソリューション
</div>

Auth0 Organizations がお客様のユースケースの要件を満たさない場合は、以下のレガシーソリューションを検討できます。お客様固有の要件に最適なアプローチを選ぶためのガイダンスについては、[Professional Services](/docs/ja-jp/get-started/professional-services) チームまでお問い合わせください。

レガシーソリューションには、次のものがあります。

* 各テナントを表すために Auth0 接続を使用する。
* 各テナントを表すために Auth0 アプリケーションを使用する。
* 各テナントを表すために Auth0 テナントを使用する。
* ユーザーのプロフィールにテナントの詳細を保存する。

<div id="use-auth0-connections">
  ### Auth0 接続を使用する
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  エンティティの上限が適用される場合があります。詳しくは、[Entity Limit Policy](/docs/ja-jp/troubleshoot/customer-support/operational-policies/entity-limit-policy)をご覧ください。Enterprise サブスクリプションをご利用の場合、エンティティ上限による制約は受けませんが、すでに数千の有効なクライアントが設定されている接続によって制約を受ける可能性があります。
</Callout>

各テナントを個別の Auth0 接続として表すことができます。

この方法では、次のようなシナリオに対応できます。

* テナントごとに、パスワードポリシーが異なるなど、接続レベルで異なる要件がある。
* 異なる接続に属するユーザープールがある。たとえば、あるテナントではユーザー名/パスワード認証情報の入力が必要でも、別のテナントではエンタープライズ <Tooltip tip="Identity Provider（IdP）: デジタルアイデンティティを保存および管理するサービス。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=IdP">IdP</Tooltip> 経由でのログインが必要な場合があります。

ユーザーに特定の接続経由でログインするよう求めるには、[Auth0 Authentication API Login エンドポイント](https://auth0.com/docs/api/authentication#login) を呼び出し、`connection` パラメーターを含めます。

<Warning>
  アプリケーションで [Lock](/docs/ja-jp/libraries#lock) を使用している場合、1 つのアプリケーションでサポートされるデータベース接続は最大 50 個であることに注意してください。ソーシャル接続とエンタープライズ接続はこの上限の対象ではありませんが、引き続き [Entity Limit Policy](/docs/ja-jp/troubleshoot/customer-support/operational-policies/entity-limit-policy) の対象です。
</Warning>

<div id="use-auth0-applications">
  ### Auth0アプリケーションを使用する
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  エンティティ数の上限が適用される場合があります。詳しくは、[Entity Limit Policy](/docs/ja-jp/troubleshoot/customer-support/operational-policies/entity-limit-policy)をご覧ください。Enterpriseサブスクリプションをご利用の場合、エンティティ数の上限による制約は受けませんが、すでに数千の有効なクライアントが有効化されている接続による制約を受ける可能性があります。
</Callout>

各テナントを個別のAuth0アプリケーションで表すことができます。

この方法では、利用可能な接続など、テナントごとに異なる要件に応じて各Auth0アプリケーションを個別に設定できます。

アプリケーション内で、ユーザーがどのテナントに属しているかを把握しておく必要があります。ユーザーがアプリケーションにログインしたら、その情報を読み取り、認証を完了するために適切なAuth0アプリケーションへ誘導する必要があります。

Auth0の<Tooltip tip="Management API: お客様が管理タスクを実行できるようにする製品。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Management+API">Management API</Tooltip>を使用して1つの接続を複数のアプリケーションで有効にするには、[コネクションの有効なクライアントを更新するエンドポイント](https://auth0.com/docs/api/management/v2/connections/patch-clients)を呼び出し、該当する接続IDを渡します。

<div id="use-auth0-tenants">
  ### Auth0テナントを使用する
</div>

各テナントは、それぞれ個別のAuth0テナントとして表現できます。

この方法では、テナントごとにアクセスを制限したうえで、ユーザーに<Tooltip tip="Auth0 Dashboard: サービスを設定するためのAuth0の主要製品。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip>へのアクセスを共有できますが、テナントごとにAuth0を個別に設定する必要があります。

つまり、各Auth0テナントの機能 (Branding、Actions、<Tooltip tip="Attack Protection: 総当たり攻撃からの保護、不審なIPのスロットリング、漏えいしたパスワードの検出、ボット検出、適応型多要素認証など、攻撃を検出して軽減するためにAuth0が提供する機能。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Attack+Protection">Attack Protection</Tooltip>など) を個別に管理する必要があるだけでなく、アプリケーション側でも複数のAuth0設定に対応しなければなりません。

<div id="store-tenant-details-in-the-users-profile">
  ### ユーザーのプロフィールにテナントの詳細を保存する
</div>

ユーザーのプロフィールにテナントの詳細を保存しておけば、ユーザーがログインした後に、アプリケーションでその情報を読み取れます。

この方法を使えば、どのテナントに属しているユーザーでも、統一された設定 (利用可能な接続など) でログインできます。

これを実装するには、任意の識別子 (たとえば `"tenant": "customer-group-12345"`) を使って、ユーザーの Auth0 プロフィールの [`app_metadata` オブジェクト](/docs/ja-jp/manage-users/user-accounts/metadata) にテナントの詳細を保存します。ユーザーがログインした後、アプリケーションで `tenant` 変数を取得し、返された値に応じた適切なバージョンを表示します。
