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

マルチテナントは、サーバー上で実行され、複数のユーザーグループがアクセスできるソフトウェアの単一インスタンスを特徴とする、アーキテクチャアプローチです。マルチテナントを使用すると、特性を共有するユーザーをグループに分割し、アプリケーションに対する個別のアクセス許可とアクセスレベルを付与できます。これにより、さまざまな顧客、事業単位、またはその他の定義されたユーザーグループに合わせてカスタマイズされたエクスペリエンスを作成、維持できます。

Auth0でマルチテナントを実装する最も良い方法は、Auth0 Organizationsを使用することです。必要に応じて、他のレガシーソリューションを使用して、個別のビジネスユースケースへの対応も可能です。貴社が企業間(B2B)の製品またはサービスを提供している場合は、ビジネスユーザー用にマルチテナントをセットアップすることで、ユースケースに役立つことがあります。

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

Auth0 Organizations

ほとんどのマルチテナントユースケースでは、Auth0 Organizationsは貴社と貴社のユーザーにとって理想的なソリューションです。Auth0 Organizationsは、エンドユーザーがアクセスできる1つ以上のアプリケーションを持つ企業間(B2B)の実装をサポートします。

一般的なB2Bの統合には以下のような特徴があります。

  • 従業員が別の企業にライセンスされた製品を使用する

  • 独自のフェデレーションと認証エクスペリエンスの軽量ブランディングを必要とする複数の組織。

  • ユーザーグループごとに異なるレベルのアプリケーションアクセス。

Auth0 Organizationsを使用すると、一意のユーザーグループを作成して、エクスペリエンスの調整にロールベースのアクセス制御カスタマイズされたログインページとメールテンプレートなどを活用できます。

Auth0 Organizationsを使ってマルチテナントを実装する方法については、「複数組織のアーキテクチャ」をご覧ください。

レガシーソリューション

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

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

  • 各テナントを表すためにAuth0接続を使用すること。

  • 各テナントを表すためにAuth0アプリケーションを使用すること。

  • 各テナントを表すためにAuth0テナントを使用すること。

  • ユーザーのプロファイルにテナントの詳細を保管すること。

Auth0接続を使用する

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

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

  • テナントごとに異なるパスワードポリシーなど、異なる接続レベルの要件がある場合。

  • 異なる接続からのユーザープールがある場合。たとえば、あるテナントがユーザーにユーザー名/パスワード資格情報の提供を要求し、別のテナントがユーザーにエンタープライズIdP経由でのログインを要求する場合があります。

特定の接続を使用してユーザーにログインを促すには、Auth0 Authentication APIログインエンドポイントを呼び出し、connectionパラメーターを含めます。

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

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

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

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

Auth0 Management APIを使用して複数のアプリケーションに接続を有効にするには、接続更新エンドポイントを呼び出し、関連するクライアントIDをenabled_clientsパラメーターに渡します。

Auth0テナントを使用する

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

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

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

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

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

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

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