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

# シングルIDプロバイダー：プロビジョニング

> 複数テナントのアーキテクチャに向けて組織をプロビジョニングすることについて説明します。

Auth0 Organizations （組織）機能を使用することによって、シングルAuth0テナントを運用環境への導入に向けて準備することができます。最も複雑なアーキテクチャのシナリオ以外のすべてについて、運用環境での使用にシングルAuth0テナントをプロビジョニングしておくことが推奨されます。そうすることで、[シングルサインオン（SSO）](/docs/ja-JP/ja-jp/authenticate/single-sign-on)や ユーザー[プロファイル管理](/docs/ja-JP/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/profile-management)などの統合や使用が容易になります。実装によっては、Auth0テナントのセットアップや付随の統合に関して、いくつかの追加項目に対処する必要が出るかもしれません。

ブランドコラテラルを使用するとユーザーが理解し信頼する環境を提供できるため、組織に関連付けられているブランディングは極めて価値の高いものです。認知されているブランドコラテラルを使用することは、提供する情報（資格情報など）が安全で確実に扱われるというユーザーの確信が強まることにも繋がります。そのため、そのまま使えるデフォルトのAuth0ブランディングは、独自のブランディングと入れ替えるべきです。詳細については、[「ブランディング」](/docs/ja-JP/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/branding)を参照してください。

<div id="organizations">
  ## Organizations
</div>

利用する各組織にはそれぞれ独立したAuth0 Organizationを作成する必要があります。この例では、Hoekstra & Associatesを代表する組織として`hoekstra`を、MetaHexa Bankを代表する組織として `metahexa`を作成します。<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-JP/ja-jp/glossary?term=auth0-dashboard" tip="Auth0 Dashboard: サービスを構成するためのAuth0の主製品。" cta="用語集の表示">Auth0 Dashboard</Tooltip>から手動で、あるいはAuth0 <Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-JP/ja-jp/glossary?term=management-api" tip="Management API: 顧客が管理タスクを実行できるようにするための製品。" cta="用語集の表示">Management API</Tooltip>を使ってプログラムで[組織の作成](/docs/ja-JP/ja-jp/manage-users/organizations/configure-organizations/create-organizations)が可能です。

<div id="applications">
  ## アプリケーション
</div>

組織のテナントの統合がどのように設計されているかによって、Auth0テナント内で [アプリケーション](/docs/ja-JP/ja-jp/get-started/applications)の定義を作成する際のオプションが異なります。どのオプションを選択したとしても、[組織の動作はアプリケーションレベルで定義されます](/docs/ja-JP/ja-jp/manage-users/organizations/configure-organizations/define-organization-behavior)。

各顧客に個別の組織テナントをプロビジョニングする場合には、一般的にそれぞれについてAuth0で独立したアプリケーションの定義が必要になります。その場合は通常、どのAuth0 Organizationを使うのかを特定する`/authorize`エンドポイントの呼び出しの一部として、アプリケーション固有の`client_id`パラメーターと`organization`パラメーターの双方が含まれます。詳細については、[「認証」](/docs/ja-JP/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/authentication)を参照してください。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  **ベストプラクティス**

  Auth0では、アプリケーションを個別に定義した方が、構成しやすいだけでなく、セキュリティのために最大限の分離を実現できます。個別に定義することで、許可されるCallback URLなどの項目を個別に設定することができ、最小権限の原則（PoLP）に従って、クライアントIDやクライアントシークレット情報が漏洩する危険を最小限に抑えることができます。
</Callout>

別の方法として、Auth0で1つのアプリケーションの定義を使用することもできます。この場合、第1要素の認証の一環として、ユーザーは必要な組織を指定するように要求されます。これには通常、共通のアプリケーション `client_id`が必要ですが、 `organization`パラメーターは`/authorize`エンドポイント宛ての呼び出しでは省略されます。

<div id="connections">
  ## 接続
</div>

次に、ユーザーの認証に使われる[［Connections（接続）］](/docs/ja-JP/ja-jp/connections)を定義します。この例では、Hoekstra & Associatesの関連ユーザーのために[［Database Connection（データベース接続）］](/docs/ja-JP/ja-jp/connections/database)、MetaHexa Bankの関連ユーザーのためには[［Enterprise Connection（エンタープライズ接続）］](/docs/ja-JP/ja-jp/connections/identity-providers-enterprise) を定義します。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  **ベストプラクティス**

  単一のIDプロバイダー（IdP）を使用している組織では、定義された組織ごとに接続を1つ作成して柔軟性を持たせ、多数のユースケースに対応します。たとえば、各組織につき1つの[データベース接続またはカスタムデータベース接続](/docs/ja-JP/ja-jp/connections/database)があれば、組織が閉鎖された場合に関連付けられているユーザーが簡単に削除できます。また、パスワードの複雑性に関して異なる要件を課している組織にとっても、柔軟性が高まります。
</Callout>

接続が定義されたら、Auth0 DashboardまたはAuth0 Management APIを使用して、適切なAuth0 Organizationにプロビジョニングされます。詳細は、[「組織の接続を有効にする」](/docs/ja-JP/ja-jp/manage-users/organizations/configure-organizations/enable-connections)をお読みください。

<div id="users">
  ## ユーザー
</div>

データベースやカスタムデータベース接続以外の接続で認証されたユーザーは、Auth0から独立した外部のIDプロバイダー（<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-2" href="/docs/ja-JP/ja-jp/glossary?term=idp" tip="IDプロバイダー（IdP）: デジタルIDを保存および管理するサービス。" cta="用語集の表示">IdP</Tooltip>）に標準的な方法でプロビジョニングされます。一方、データベースやカスタムデータベース接続で認証されたユーザーは、さまざまな方法でプロビジョニングされます。Auth0 DashboardやAuth0 Management APIを使用すると、Auth0テナントでユーザーを直接作成することができます。また、[［Automatic Migration（自動移行）］](/docs/ja-JP/ja-jp/manage-users/user-migration/configure-automatic-migration-from-your-database)と[［Bulk Migration（一括移行）］](/docs/ja-JP/ja-jp/manage-users/user-migration/bulk-user-imports)にも対応しています。

<Warning>
  Management APIまたはDashboardを介してユーザーをプロビジョニングするには、データベース接続またはカスタムデータベース接続を少なくとも1つのアプリケーションに対して直接有効にしなければなりません。データベース接続またはカスタムデータベース接続をOrganizationに対して有効にするだけでは、十分ではありません。
</Warning>

ユーザーは、メンバーシップを割り当てることによってAuth0 Organizationに関係付けられ、Auth0 Organizationを設定して、[ユーザーのメンバーシップを自動で](/docs/ja-JP/ja-jp/manage-users/organizations/configure-organizations/grant-just-in-time-membership)、または[手動で、割り当てることができます](/docs/ja-JP/ja-jp/manage-users/organizations/configure-organizations/assign-members)。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  ユーザーに手動で組織のメンバーシップを割り当てるためには、そのユーザーにAuth0で定義された[ユーザープロファイル](/docs/ja-JP/ja-jp/manage-users/user-accounts/user-profiles)がなければなりません。[メンバーシップを手動で割り当てる](/docs/ja-JP/ja-jp/manage-users/organizations/configure-organizations/assign-members)ときは、Auth0 Tenant DashboardまたはAuth0 Management APIを使用します。
</Callout>

<div id="invitation">
  ### Invitation（招待）
</div>

Auth0 Organization機能は、Member Invitation（メンバーの招待）の使用にも対応しています。メンバー招待ワークフローでは、ユーザーをアプリケーションに招待すると、ユーザーが自動的にプロビジョニングされ、ユーザーのメンバーシップが自動的に生成されます。

<div id="database-connection">
  #### データベース接続
</div>

Hoekstra & Associatesの例を使って、ユーザー招待の一部として使用されるデータベース接続にこの実装がどのように繋がっていくのかを見てみましょう。説明にあるワークフローのほとんどは通常、使用している技術スタックに関連するAuth0 SDKやライブラリーが処理するものです。

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/ABlkB6TUYafgJS-z/docs/images/ja-jp/cdy7uua7fh8z/2QMwMeBQ6U9TjLtbjPgNwe/f9268262c6dbc3d371ff3bf9dcc3a360/Isolated_Users__Shared_Apps__Invitation_Flow__Database_Connection_.png?fit=max&auto=format&n=ABlkB6TUYafgJS-z&q=85&s=20a8af5ec4edb393fff5a6deb20ef03f" alt="アーキテクチャシナリオ - MOA - 分離されたユーザー、共有アプリ、招待フロー（データベース接続）" width="2850" height="1157" data-path="docs/images/ja-jp/cdy7uua7fh8z/2QMwMeBQ6U9TjLtbjPgNwe/f9268262c6dbc3d371ff3bf9dcc3a360/Isolated_Users__Shared_Apps__Invitation_Flow__Database_Connection_.png" />
</Frame>

1. Hoekstra & Associateに勤めるジェニファーは、Hoekstra & AssociatesのTravel0 Corporate Bookingインスタンスの代理として、Travel0のAuth0テナントからメールを受信します。

   1. メールは「[組織メンバーを招待する](/docs/ja-JP/ja-jp/manage-users/organizations/configure-organizations/invite-members)」で説明した通り送信され、Auth0 DashboardとAuth0 Management APIのいずれかを使ってトリガーされた可能性があります。

2. ジェニファーはメールを開いて、提供されたリンクをクリックします。そうすると、ブラウザーにHoekstra & AssociatesのTravel0 Corporate Bookingインスタンスが表示されます。リンク内のベースURLは[アプリケーション ログイン URI](/docs/ja-JP/ja-jp/get-started/applications/application-settings)として指定されたもので、Travel0 Auth0 TenantのTravel0 Corporate BookingアプリケーションのHoekstra & Associatesのインスタンスの一部を構成します。

   1. リンクには`organization`と`organization_name`パラメーターが含まれます。`organization`パラメーターは、Auth0テナント内で対応するAuth0 Organization定義のIDに設定されます。これは、手順3の一部でAuth0テナントへ転送されます。
   2. このリンクにはまた、やはり手順3の一部として転送される`invitation`パラメーターも含まれます。

3. Hoekstra & AssociatesのTravel0 Corporate Bookingインスタンスは、`/authorize`エンドポイントを呼び出して、通常は[Auth0 SDK](/docs/ja-JP/ja-jp/libraries)またはサードパーティのライブラリを通して、以下に類似したパラメーターを渡すことにより、 [認可コードフロー](/docs/ja-JP/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow)（[PKCE](/docs/ja-JP/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce)を使用または不使用）を使ってTravel0 Auth0 Tenantにリダイレクトします。

   1. `redirect_uri`：[`https://hoekstra.corp.travel0.net/login/callback`](https://hoekstra.corp.travel0.net/login/callback)
   2. `response_type`：`code`
   3. `state`：このセッションで生成された一意の [state](/docs/ja-JP/ja-jp/secure/attack-protection/state-parameters)
   4. `scope`：`openid profile` ...
   5. ユーザー関連情報をベースとした、必要な追加の[OIDCスコープ](/docs/ja-JP/ja-jp/get-started/apis/scopes/openid-connect-scopes)
   6. `client_id`：Hoekstra & AssociatesのTravel0 Corporate Bookingインスタンスのため、Travel0 Auth0テナントで作成されたアプリケーションに関連付けられているクライアントID
   7. `organization`：手順2の説明にあるように、通常はメール内のリンクを通して取得される招待側組織のID。`organization=`organization\_idの形式で指定されます（organization\_idは、Auth0 Tenantで、対応するAuth0 Organization定義と関連付けられている識別子）。
   8. `invitation`：手順2の説明にあるように、メール内のリンクに関連付けられる追加の`invitation`パラメーター。

4. Travel0 Auth0テナントは、`/signup/invitation`にリダイレクトしてユーザーからパスワード資格情報を収集します。

   1. 「[ブランディング](/docs/ja-JP/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/branding)」で説明した通り、組織固有のブランドコラテラルを表示するように設定できるユニバーサルログインページが表示されます。

      <Warning>
        Auth0 Organizations機能に関連付けられた招待ワークフローは、Auth0でのSSOセッションを考慮しません。ユーザーが、サインアップするよう招待され、すでにサインインしている場合、メール内のリンクをクリックすると、関連するユニバーサルログインページが必ず表示されます。
      </Warning>

5. ユーザーはパスワード（と、ユーザー名など、追加の資格情報）を入力して、［続行］をクリックします。ユーザーIDは、ユーザーに関連付けられているメールアドレスに設定され、ユーザーはこの設定を変更できません。

6. Travel0のAuth0テナントが資格情報を確認します。有効であれば、ユーザーがプロビジョニングされ、Auth0 Organizationのメンバーシップが設定されます。ユーザーは暗黙的に認証され、 [Rules](/docs/ja-JP/ja-jp/customize/rules)のパイプラインが実行されます。ルールは、「[認証](/docs/ja-JP/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/authorization)」で説明した通り、アクセス制御を取り扱うために使われます。

   1. ユーザーの資格情報が無効な場合には、ユーザーに再入力が要求されます。

7. 資格情報のチェックとルールの実行が完了すると、ユーザーは`redirect_uri`（[`https://hoekstra.corp.travel0.net/login/callback`](https://hoekstra.corp.travel0.net/login/callback)）にリダイレクトされ、手順3の`state`と`code`が渡されます。

8. Hoekstra & AssociatesのTravel0 Corporate Bookingインスタンスが`state`を検証し、[`https://auth.travel0.net/oauth/token`](https://auth.travel0.net/oauth/token)でTravel0 Auth0のテナントを呼び出して、 [ID トークン](https://auth0.com/docs/tokens/id-tokens)と引き換えに`code`とその`クライアントID`および`クライアントシークレット`を渡します。その後IDトークンを使って [`https://hoekstra.corp.travel0.net`](https://hoekstra.corp.travel0.net)のセッションが作成されます。

9. Hoekstra & AssociatesインスタンスのTravel0 Corporate Bookingインスタンスは、ユーザーに適切なページを表示します。

<div id="enterprise-connection">
  #### エンタープライズ接続
</div>

MetaHexa Bankの例を使って、ユーザー招待の一部として使用されるエンタープライズ接続にこの実装がどのように繋がっていくのかを見てみましょう。今回も、説明にあるワークフローのほとんどは通常、使用している技術スタックに関連するAuth0 SDKやライブラリーが処理するものです。

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/8DIt0xu_-cUu1jhk/docs/images/ja-jp/cdy7uua7fh8z/1IsdaHpprvIp17R5zYIg7q/dbf421b8458a63b23397852d56c01015/Isolated_Users__Shared_Apps__Invitation_Flow__Enterprise_Connection_.png?fit=max&auto=format&n=8DIt0xu_-cUu1jhk&q=85&s=fdb67b746cde088e51ddca5daa9fbfda" alt="アーキテクチャシナリオ - MOA - 分離されたユーザー、共有アプリ、招待フロー（エンタープライズ接続）" width="2951" height="1232" data-path="docs/images/ja-jp/cdy7uua7fh8z/1IsdaHpprvIp17R5zYIg7q/dbf421b8458a63b23397852d56c01015/Isolated_Users__Shared_Apps__Invitation_Flow__Enterprise_Connection_.png" />
</Frame>

1. MetaHexa Bankに勤めるアミンサは、MetaHexa BankのTravel0 Corporate Bookingインスタンスの代理として、Travel0のAuth0テナントからメールを受信します。

   1. メールは「[組織メンバーを招待する](/docs/ja-JP/ja-jp/manage-users/organizations/configure-organizations/invite-members)」で説明した通り送信され、Auth0 DashboardとAuth0 Management APIのいずれかを使ってトリガーされた可能性があります。
2. Aminthaはメールを開いて、提供されたリンクをクリックします。そうすると、ブラウザーにMetaHexa BankのTravel0 Corporate Bookingインスタンスが表示されます。リンク内のベースURLは[アプリケーション ログイン URI](/docs/ja-JP/ja-jp/get-started/applications/application-settings)として指定されたもので、Travel0 Auth0 TenantのTravel0 Corporate BookingアプリケーションのMetaHexa Bankのインスタンスの一部を構成します。

   1. リンクには`organization`と`organization_name`パラメーターが含まれます。`organization`パラメーターは、Auth0テナント内で対応するAuth0 Organization定義のIDに設定されます。これは、手順3の一部でAuth0テナントへ転送されます。
   2. このリンクにはまた、やはり手順3の一部として転送される`invitation`パラメーターも含まれます。
3. MetaHexa BankのTravel0 Corporate Bookingインスタンスは、`/authorize`エンドポイントを呼び出して、通常は[Auth0 SDK](/docs/ja-JP/ja-jp/libraries)またはサードパーティのライブラリを通して、以下に類似したパラメーターを渡すことにより、 [認可コードフロー](/docs/ja-JP/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow)（[PKCE](/docs/ja-JP/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce)を使用または不使用）を使ってTravel0 Auth0 Tenantにリダイレクトします。

   1. `redirect_uri`：[`https://metahexa.corp.travel0.net/login/callback`](https://metahexa.corp.travel0.net/login/callback)
   2. `response_type`：`code`
   3. `state`：このセッションで生成された一意の [state](/docs/ja-JP/ja-jp/secure/attack-protection/state-parameters)
   4. `scope`：`openid profile` ...
   5. ユーザー関連情報をベースとした、必要な追加の[OIDCスコープ](/docs/ja-JP/ja-jp/get-started/apis/scopes/openid-connect-scopes)
   6. `client_id`：MetaHexa BankのTravel0 Corporate Bookingインスタンスのために、Travel0のAuth0テナントで作成されたアプリケーションに関連付けられているクライアントID。
   7. `organization`：手順2の説明にあるように、通常はメール内のリンクを通して取得される招待側組織のID。`organization=`organization\_idの形式で指定されます（organization\_idは、Auth0 Tenantで、対応するAuth0 Organization定義と関連付けられている識別子）。
   8. `invitation`：手順2の説明にあるように、メール内のリンクに関連付けられる追加の`invitation`パラメーター。
4. Travel0 Auth0テナントは`/invitation`にリダイレクトして、そこでアミンサは第1要素の資格情報のためにMetaHexaのIdPにリダイレクトされることを知らされます。

   1. ユーザーが同意すると
   2. Auth0がMetaHexa BankのIdPインスタンスにリダイレクトし
   3. ログインページが表示され、ユーザーは資格情報を入力してから`［login（ログイン）］`をクリックします。
5. 成功すると、Auth0 Organizatioメンバーシップが設定され、ユーザーは暗黙的に認証されて、[ルール](/docs/ja-JP/ja-jp/customize/rules)パイプラインが実行されます。ルールは、「[認証](/docs/ja-JP/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/authorization)」で説明した通り、アクセス制御を取り扱うために使われます。

手順6から8は「[データベース接続](#database-connection)」シナリオと同じですが、ユーザーはジェニファーでなくてアミンサで、Hoekstra & AssociatesでなくMetaHexa Bank（`metahexa.corp.travel0.net`）が使われます。

<div id="social-connection">
  #### ソーシャル接続
</div>

ソーシャル接続を介した招待は、[エンタープライズ接続](#enterprise-connections)と似たパターンを使用しますが、アップストリームIdPは、特定の組織でなく、ソーシャルプロバイダーと関連付けられます。ソーシャル接続の使用に関して追加で考慮するべき内容については、「[認証](/docs/ja-JP/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/authentication)」を参照してください。
