> ## 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.

> Organizations を通じたマルチテナント アーキテクチャ向けのユーザー認証について説明します。

# Single Identity Provider: 認証

アーキテクチャ シナリオでは、推奨されるベストプラクティスとしての [Universal Login](/docs/ja-jp/authenticate/login/auth0-universal-login) の使用を含む、[B2B Authentication](/docs/ja-jp/get-started/architecture-scenarios/business-to-business/authentication) に関する汎用的なガイダンスを提供しています。ここで紹介するガイダンスとあわせてご確認いただくことをお勧めします。

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

  Auth0 では多数の認証ワークフローがサポートされていますが、Auth0 Universal Login を使用するワークフローは、[最適な機能とセキュリティ](/docs/ja-jp/authenticate/login/universal-vs-embedded-login) を提供するため、業界標準としても Auth0 としてもベストプラクティスと見なされています。特に Universal Login は、[シングルサインオン (SSO) を標準で提供し](https://auth0.com/learn/how-to-implement-single-sign-on/)、[フィッシング](https://auth0.com/blog/all-you-need-to-know-about-the-google-docs-phishing-attack/) や [バケットブリゲード攻撃](/docs/ja-jp/secure/security-guidance/prevent-threats) のような攻撃の軽減にも役立ちます。そのため、ユーザーがパスワード資格情報を入力する場合は、可能な限りこれを優先すべきです。さらに重要なのは、[New Universal Login Experience](/docs/ja-jp/authenticate/login/auth0-universal-login/universal-login-vs-classic-login/universal-experience) が、Auth0 Organizations 機能の使用時にサポートされる唯一の仕組みであることです。
</Callout>

ユーザーを認証するには、第 1 認証要素の資格情報を処理する必要があります。これを Auth0 が行う場合でも、サードパーティの <Tooltip tip="IDプロバイダー (IdP): デジタル アイデンティティを保存および管理するサービス。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=Identity+Provider">IDプロバイダー</Tooltip> (IdP) が行う場合でも、Auth0 Organizations 機能を使用する際は、Auth0 の [Universal Login エクスペリエンス](/docs/ja-jp/authenticate/login/auth0-universal-login/universal-login-vs-classic-login/universal-experience) も使用する必要があります。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Auth0 では、Auth0 テナントごとに 1 つの認証済みユーザーコンテキストのみをサポートしており、テナントが認証済みユーザーコンテキストを選択的に切り替えることはできません。ユーザーコンテキストを変更すると、アクティブな SSO セッションに影響が及び、これは Auth0 Organizations 機能にも当てはまります。組織ごとのコンテキストがどうしても必要な場合は、複数の Auth0 テナントを本番環境にデプロイする必要があります。複数のテナントを使用すると、シングルサインオン (SSO) やプロファイル管理などに影響が及ぶため、この方法を採る前に慎重に検討してください。
</Callout>

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

Hoekstra & Associates の例を使って、Auth0 のデータベース接続で認証されるユーザーに対し、この認証実装がどのような流れになるかを見ていきましょう。ここで説明するワークフローの大部分は、通常、使用している技術スタックに対応する Auth0 SDK またはライブラリによって処理されます。

<Frame>
  <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4ZdA61Ar4ijowOLLGCgLKx/fb71991702bf5f223f5ea184f7b6e693/Isolated_Users__Shared_Apps__Database_Login_Flow.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=65399e2ba81971025eef7b366f7ebacf" alt="アーキテクチャのシナリオ - MOA - 分離されたユーザー、共有アプリ、データベースログインフロー" width="2156" height="1140" data-path="docs/images/cdy7uua7fh8z/4ZdA61Ar4ijowOLLGCgLKx/fb71991702bf5f223f5ea184f7b6e693/Isolated_Users__Shared_Apps__Database_Login_Flow.png" />
</Frame>

1. Hoekstra & Associates の Jennifer はブラウザーを開き、Hoekstra & Associates の Travel0 Corporate Booking インスタンスにアクセスします。

   1. Jennifer が Hoekstra & Associates の Travel0 Corporate Booking インスタンスのセッションCookieをすでに保持している場合、通常はシステムにログイン済みのため、ここで処理を終了します。詳しくは、[シングルサインオン](/docs/ja-jp/authenticate/single-sign-on)をご覧ください。
2. Hoekstra & Associates の Travel0 Corporate Booking インスタンスは、通常 [Auth0 SDK](/docs/ja-jp/libraries) またはサードパーティのライブラリを使用して `/authorize` エンドポイントを呼び出し、パラメーターを渡すことで、[認可コードフロー](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow) ([PKCE](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce) の有無を問わず) を使って Travel0 の Auth0 テナントにリダイレクトします。

   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/secure/attack-protection/state-parameters)
   4. `scope`: `openid profile` ...
   5. ユーザーについて必要な情報に応じて、必要な追加の[OIDC Scopes](/docs/ja-jp/get-started/apis/scopes/openid-connect-scopes)。
   6. `client_id`: Hoekstra & Associates の Travel0 Corporate Booking インスタンス向けに、Travel0 Auth0 テナントで作成されたアプリケーションに関連付けられた Client ID。
   7. `organization`: 使用する Auth0 Organization。organization が事前にわかっている場合は、`/authorize` へのリクエストにこのパラメーターを含めることができます。このパラメーターは `organization=`organization\_id の形式で指定します。ここで、organization\_id には、Auth0 テナント内の対応する Auth0 Organization 定義に関連付けられた識別子を設定します。あるいは、`/authorize` の呼び出しから `organization` パラメーターを省略し、第一認証要素による認証の一環として、適切な organization をユーザーに選択させるよう Auth0 テナントを設定することもできます。詳しくは、[Define Organization Behavior](/docs/ja-jp/manage-users/organizations/configure-organizations/define-organization-behavior) を参照してください。

      <Warning>
        `/authorize` endpoint の呼び出しに `organization` パラメーターを含める場合は、Auth0 とのセッション中は常に一貫してこれを使用する必要があります。Organizations 機能では、選択された organization は Auth0 SSO セッションに関連付けられないため、このパラメーターを省略すると、ユーザーは毎回目的の organization を選択するよう求められます。
      </Warning>
3. Travel0 Auth0 テナントは、ユーザーに資格情報を入力してもらうため `/login` にリダイレクトします。Jennifer が Hoekstra & Associates の Database セッションをすでに持っている場合は、ステップ 3a と 4 はスキップされます。詳しくは、[シングルサインオン](/docs/ja-jp/authenticate/single-sign-on) をご覧ください。

   1. [ブランディング](/docs/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/branding)で説明されているように、organization固有のブランド要素を含めるように設定した Universal Login ページが表示されます。
4. ユーザーは資格情報を入力し、`login` をクリックします。
5. Travel0 Auth0 テナントはユーザーの資格情報を確認し、有効であれば [ルール](/docs/ja-jp/customize/rules) パイプラインが実行されます。ルールは、[認可](/docs/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/authorization) で説明されているように、アクセス制御を処理するために使用できます。ユーザーの資格情報が無効な場合は、再入力を求められます。

   <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
     このオプションを指定すると、メンバーシップが自動的に割り当てられます。詳細については、[Organization Connection に Just-In-Time メンバーシップを付与する](/docs/ja-jp/manage-users/organizations/configure-organizations/grant-just-in-time-membership)を参照してください。[手動で割り当てるメンバーシップ](/docs/ja-jp/manage-users/organizations/configure-organizations/assign-members)の場合、ユーザーがまだ組織のメンバーとして割り当てられていないと、バリデーションは失敗します。
   </Callout>
6. 第1認証要素による認証とルールの実行が正常に完了すると、ユーザーは手順2で渡された `state` と `code` を伴って、`redirect_uri` ([`https://hoekstra.corp.travel0.net/login/callback`](https://hoekstra.corp.travel0.net/login/callback)) にリダイレクトされます。
7. Hoekstra & Associates の Travel0 Corporate Booking インスタンスは `state` を検証した後、[`https://auth.travel0.net/oauth/token`](https://auth.travel0.net/oauth/token) にある Travel0 Auth0 テナントを呼び出し、`code`、自身の `client id`、および `client secret` を渡して、[ID トークン](/docs/ja-jp/secure/tokens/id-tokens) と引き換えます。続いて、この ID トークンを使用して [`https://hoekstra.corp.travel0.net`](https://hoekstra.corp.travel0.net) のセッションが生成されます。
8. Hoekstra & Associates の Travel0 Corporate Booking インスタンスは、適切なページをユーザーに表示します。

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

エンタープライズ接続経由の認証も、流れはほぼ同じです。MetaHexa Bank の例を使って、MetaHexa Bank のエンタープライズ接続で認証されるユーザーに対して、この認証実装がどのように進むかを見ていきましょう。ここで説明するワークフローの大部分は、通常、使用している技術スタックに対応する Auth0 SDK またはライブラリによって処理されます。

<Frame>
  <img src="https://mintcdn.com/translations/raZlN0BXDjNonwyb/docs/images/cdy7uua7fh8z/11D1vMSKQcxyhfdDZzLprD/a8b0b85363ebbe6af3c67ba5ba90fc8b/Isolated_Users__Shared_Apps__Enterpise_Login_Flow.png?fit=max&auto=format&n=raZlN0BXDjNonwyb&q=85&s=68d8055ed2314de03f206b9a633d578b" alt="Architecture Scenarios - MOA - Isolated Users, Shared Apps, Enterprise Login Flow" width="2601" height="1157" data-path="docs/images/cdy7uua7fh8z/11D1vMSKQcxyhfdDZzLprD/a8b0b85363ebbe6af3c67ba5ba90fc8b/Isolated_Users__Shared_Apps__Enterpise_Login_Flow.png" />
</Frame>

1. MetaHexa Bank の Amintha がブラウザーを開き、MetaHexa Bank 用の Travel0 Corporate Booking インスタンスにアクセスします。

   1. Amintha がすでに MetaHexa Bank 用の Travel0 Corporate Booking インスタンスのセッション Cookie を保持している場合、通常はシステムにログイン済みのため、ここで処理は終了します。詳細については、[シングルサインオン](/docs/ja-jp/authenticate/single-sign-on) を参照してください。
2. MetaHexa Bank 用の Travel0 Corporate Booking インスタンスは、`/authorize` エンドポイントを呼び出し、通常は [Auth0 SDK](/docs/ja-jp/libraries) またはサードパーティのライブラリを使用して各種パラメーターを渡すことで、Travel0 の Auth0 テナントに対して [認可コードフロー](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow) ([PKCE](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce) あり／なし) を開始します。

   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/secure/attack-protection/state-parameters)
   4. `scope`: `openid profile` ...
   5. ユーザーについて必要な情報に応じて、必要な追加の [OIDC Scopes](/docs/ja-jp/get-started/apis/scopes/openid-connect-scopes)
   6. `client_id`: MetaHexa Bank 用の Travel0 Corporate Booking インスタンス向けに、Travel0 の Auth0 テナントで作成されたアプリケーションに関連付けられた Client ID
   7. `organization`: 使用する Auth0 組織。組織が事前にわかっている場合は、`/authorize` への request にこのパラメーターを含めることができます。これは `organization=`organization\_id の形式で指定し、organization\_id には Auth0 テナント内の対応する Auth0 組織定義に関連付けられた identifier を設定します。あるいは、`/authorize` の呼び出しで `organization` パラメーターを省略し、最初の認証要素の認証時に適切な 組織 をユーザーが選択するよう Auth0 テナントを設定することもできます。詳細については、[Define Organization Behavior](/docs/ja-jp/manage-users/organizations/configure-organizations/define-organization-behavior) を参照してください。

      <Warning>
        `/authorize` エンドポイントの呼び出しに `organization` パラメーターを含める場合は、Auth0 とのセッション中は常に一貫して使用する必要があります。組織機能では、選択された 組織 は Auth0 の SSO セッションに関連付けられないため、このパラメーターを省略すると、ユーザーは毎回目的の 組織 を選択するよう求められます。
      </Warning>
   8. `connection`: MetaHexa Bank 用に設定された Auth0 エンタープライズ接続の名前

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

        `connection` パラメーターは必ず指定してください。指定しない場合、ユーザーは upstream IDプロバイダー (IdP) に関連付けられたエンタープライズ接続を選択する必要があり、UX の観点では余計な手順になります。
      </Callout>
3. Travel0 の Auth0 テナントは、第1認証要素の資格情報を認証するため、MetaHexa IdP にリダイレクトします。

   1. ログインページが表示され、ユーザーは資格情報を入力します。Amintha がすでに MetaHexa IdP とのセッションを持っている場合、手順 3a と 4 はスキップされます。詳細については、[シングルサインオン (SSO) ](/docs/ja-jp/authenticate/single-sign-on) を参照してください。
4. ユーザーは資格情報を入力し、`login` をクリックします。
5. 第1認証要素の認証が成功すると、[ルール](/docs/ja-jp/customize/rules) pipeline が実行されます。ルールは、[Authorization](/docs/ja-jp/get-started/architecture-scenarios/multiple-organization-architecture/single-identity-provider-organizations/authorization) で説明されている access control の処理に使用できます。ユーザーの資格情報が無効な場合は、再入力を求められます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  このオプションが指定されている場合、メンバーシップは自動的に割り当てられます。詳しくは、[Organization Connection に Just-In-Time メンバーシップを付与する](/docs/ja-jp/manage-users/organizations/configure-organizations/grant-just-in-time-membership)を参照してください。[手動で割り当てられたメンバーシップ](/docs/ja-jp/manage-users/organizations/configure-organizations/assign-members)では、ユーザーがその組織のメンバーとしてまだ割り当てられていない場合、バリデーションに失敗します。
</Callout>

ステップ 6 から 8 は [データベース接続](#database-connection) のシナリオで説明されている内容と同じですが、ユーザーは Jennifer ではなく Amintha であり、Hoekstra & Associates の代わりに MetaHexa Bank (`metahexa.corp.travel0.net`) を使用します。

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

ソーシャル接続による認証は、[エンタープライズ接続](#enterprise-connection)の場合とほぼ同じパターンに従いますが、上流の IdP は特定の organization ではなく、ソーシャルプロバイダーに関連付けられています。

<Warning>
  Auth0 の ソーシャル接続 はテナントレベルで定義されます。通常、各ソーシャルプロバイダーについて、1 つの Auth0 テナントに設定される ソーシャル接続 は 1 つだけであり、これは Auth0 テナント全体に対する定義を表します。したがって、ユーザーが行った同意は、Auth0 テナント内で定義されたすべての Auth0 Organizations に適用され、特定の 1 つの organization だけに適用されるものではありません。
</Warning>

ソーシャル接続 では、organization ごとに一貫した形でユーザー分離をモデル化することはできません。[カスタムソーシャル接続](/docs/ja-jp/authenticate/identity-providers/social-identity-providers/oauth2)を使用して、1 つのソーシャルプロバイダーに対して複数の接続を作成し、ユーザー分離をモデル化したくなるかもしれませんが、そのような方法は避けてください。このような戦略では、同じ user ID が複数の接続定義に作成される可能性があり、将来的に確実に問題を引き起こします。
