> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-actions-triggers-prototype.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)を使用することです。必要に応じて、他のレガシーソリューションを使用して、個別のビジネスユースケースへの対応も可能です。貴社が[企業間（B2B）](/docs/ja-jp/get-started/architecture-scenarios/business-to-business)の製品またはサービスを提供している場合は、ビジネスユーザー用にマルチテナントをセットアップすることで、ユースケースに役立つことがあります。

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

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

## Auth0 Organizations

ほとんどのマルチテナントユースケースでは、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を使ってマルチテナントを実装する方法については、「[複数組織のアーキテクチャ](/docs/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture)」をご覧ください。

## レガシーソリューション

Auth0 Organizationsで貴社のユースケースの要件が満たせない場合には、成功に繋がるソリューションを開発できるように、弊社の[プロフェッショナルサービス](/docs/ja-jp/get-started/professional-services)チームまでお問い合わせください。

レガシーソリューションの例には、以下のようなものがあります：

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

### Auth0接続を使用する

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  エンティティ制限が適用されることがあります。詳細については、「[エンティティ制限ポリシー](/docs/ja-jp/troubleshoot/customer-support/operational-policies/entity-limit-policy)」をお読みください。エンタープライズサブスクリプションをご利用の場合、エンティティ制限によって制約されることはありませんが、接続で膨大な数のクライアントが有効になっていると制約を受ける可能性があります。
</Callout>

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

このアプローチでは、以下のようなシナリオをサポートできます：

* テナントごとに異なるパスワードポリシーなど、異なる接続レベルの要件がある場合。
* 異なる接続からのユーザープールがある場合。たとえば、あるテナントがユーザーにユーザー名/パスワード資格情報の提供を要求し、別のテナントがユーザーにエンタープライズ<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-2" href="/docs/ja-jp/glossary?term=idp" tip="IDプロバイダー（IdP）: デジタルIDを保存および管理するサービス。" cta="用語集の表示">IdP</Tooltip>経由でのログインを要求する場合があります。

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

<Warning>
  アプリケーションで[ロック](https://auth0.com/docs/libraries#lock)を使用している場合には、1つのアプリケーションについてデータベース接続の上限が50までであることに注意してください。ソーシャル接続とエンタープライズ接続はこの制限の影響を受けませんが、それでも[エンティティ制限ポリシー](https://auth0.com/docs/troubleshoot/customer-support/operational-policies/entity-limit-policy)の対象にはなります。
</Warning>

### Auth0アプリケーションを使用する

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  エンティティ制限が適用されることがあります。詳細については、「[エンティティ制限ポリシー](/docs/ja-jp/troubleshoot/customer-support/operational-policies/entity-limit-policy)」をお読みください。エンタープライズサブスクリプションをご利用の場合、エンティティ制限によって制約されることはありませんが、接続で膨大な数のクライアントが有効になっていると制約を受ける可能性があります。
</Callout>

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

このアプローチにより、使用可能な接続など、さまざまなテナント要件に基づいて各Auth0アプリケーションを一意に構成できます。

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

### Auth0テナントを使用する

各テナントは、個別のAuth0テナントで表すことができます。

このアプローチにより、テナントによって制限されたAuth0ダッシュボードへのアクセスをユーザーと共有できますが、テナントごとにAuth0を個別に構成する必要があります。

つまり、各Auth0テナントの機能を個別に管理するだけでなく（ブランディング、アクション、攻撃防御など）、アプリケーションは複数のAuth0構成をサポートする必要があるということです。

### ユーザーのプロファイルにテナントの詳細情報を保管する

テナントの詳細情報をユーザーのプロファイルに保管し、ユーザーのログイン後にアプリケーションでその情報を読み取ることができます。

このアプローチでは、所属するテナントにかかわらず、すべてのユーザーが統一された構成（利用可能な接続など）でログインできるようになります。

これを実装するために、任意の識別子（`"tenant":"customer-group-12345"`など）を使用して、`app_metadata`オブジェクトにあるユーザーのAuth0プロファイルにテナントの詳細を保管することができます。ユーザーがログインすると、アプリケーションは`tenant`変数を取得し、返された値に適切なバージョンを表示します。
