ファネルベースのアプローチを用いてグローバル ID ソリューションを構築する

この記事では、ファネルベースの設計アプローチのシナリオについて説明します。 設計を開始する前に、ファネルベースとリージョンベースの両方の設計アプローチの機能パフォーマンスを確認することをお勧めします。 この記事は、組織に最適な設計を決定するのに役立ちます。

設計では、以下を考慮します。

  • ローカル アカウントのサインアップとサインイン
  • フェデレーション アカウントのサインアップとサインイン
  • テナント間 API ベースの認証でサポートされる、登録済みリージョン外からサインインするユーザーのローカル アカウントの認証
  • テナント間 API ベースの参照でサポートされる、登録済みリージョン外からサインインするユーザーのフェデレーション アカウントの認証
  • 複数の異なるリージョンからのサインアップの防止
  • 接続する単一のエンドポイントがある各リージョンのアプリケーション

ローカル アカウントを使用したサインインのユース ケース

グローバル Azure AD B2C 環境では、次のようなユース ケースが一般的です。 ローカル アカウントのユース ケースには、移動中のユーザーのアカウントも含まれます。 各ユース ケースに応じた図とワークフローの手順があります。

ローカル ユーザーのサインアップ

このユース ケースは、ユーザーが自分の国またはリージョンから Azure AD B2C ローカル アカウントを使用してサインアップを実行する方法を示しています。

ローカル ユーザーのサインアップ フローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカ (EMEA) のユーザーが myapp.fr にサインアップを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、定義された条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーがサインアップを試みます。 サインアップ プロセスでは、グローバル ルックアップ テーブルを調べて、リージョンの Azure AD B2C テナントのいずれかにユーザーが存在するかどうかが確認されます。

  4. グローバル ルックアップ テーブルでユーザーが見つかりません。 このユーザーのアカウントが Azure AD B2C に書き込まれ、ユーザーがサインアップしたリージョンを追跡するためのレコードがグローバル ルックアップ テーブルに作成されます。

  5. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  6. ファネル テナントで、アプリケーションにトークンが発行されます。

既存のローカル ユーザーがサインアップを試みる場合

このユース ケースは、ユーザーが自分の国/リージョンから、または別のリージョンから同じメールアドレスを再登録し、ブロックされる場合を示しています。

既存のアカウントのサインアップ フローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインアップを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーがサインアップを試みます。 サインアップ プロセスでは、グローバル ルックアップ テーブルを調べて、リージョンの Azure AD B2C テナントのいずれかにユーザーが存在するかどうかが確認されます。

  4. グローバル ルックアップ テーブルでユーザーのメールアドレスが見つかります。これは、過去のある時点でユーザーがこのメールアドレスをソリューションに登録したことを示しています。

  5. そのアカウントが存在することを示すエラーがユーザーに表示されます。

ローカル ユーザーによるサインイン

このユース ケースは、ユーザーが自分の国またはリージョンから Azure AD B2C ローカル アカウントを使用してサインインを実行する方法を示しています。

ローカル ユーザーのサインイン フローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーが、リージョンのテナントで資格情報を入力します。

  4. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  5. ファネル テナントで、アプリケーションにトークンが発行されます。

移動中のユーザーによるサインイン

このユース ケースは、ユーザーがリージョン間を移動しても、サインアップに応じてリージョンのテナントに保存されているユーザー プロファイルと資格情報を維持する方法を示しています。

移動中のユーザーのサインイン フローを示すスクリーンショット。

  1. 北米 (NOAM) のユーザーが、フランスでの休暇中に myapp.fr にサインインを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーが、リージョンのテナントで資格情報を入力します。

  4. ユーザーのメールアドレスが EMEA Azure AD B2C ディレクトリで見つからなかったため、リージョンのテナントでグローバル ルックアップ テーブルの参照が実行されます。

  5. ユーザーのメールアドレスは、NOAM Azure AD B2C テナントにサインアップされていることがわかります。

  6. EMEA Azure AD B2C テナントで、NOAM Azure AD B2C テナントに対して Microsoft Entra ROPC フローが実行され、資格情報が検証されます。

    注意

    この呼び出しでは、ユーザーが Graph API 呼び出しを実行するためのトークンもフェッチされます。 EMEA Azure AD B2C テナントで、NOAM Azure AD B2C テナントに対して Graph API 呼び出しが実行され、ユーザーのプロファイルがフェッチされます。 この呼び出しは、最後のステップで取得された Graph API のアクセス トークンによって認証されます。

  7. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  8. ファネル テナントで、アプリケーションにトークンが発行されます。

ローカル ユーザーがパスワードを忘れた場合

このユース ケースは、自分の国またはリージョンにいるユーザーがパスワードをリセットする方法を示しています。

ローカル ユーザーがパスワードを忘れた場合のフローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーが EMEA Azure AD B2C テナントにアクセスし、[パスワードを忘れた場合] を選択します。 ユーザーがメールアドレスを入力して検証します。

  4. メールアドレスの参照が実行され、ユーザーが存在するリージョンのテナントが特定されます。

  5. ユーザーが新しいパスワードを指定します。

  6. この新しいパスワードが、EMEA Azure AD B2C テナントに書き込まれます。

  7. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  8. ファネル テナントで、アプリケーションにトークンが発行されます。

移動中のユーザーがパスワードを忘れた場合

このユース ケースは、アカウントを登録したリージョンから離れているユーザーがパスワードをリセットする方法を示しています。

移動中のユーザーがパスワードを忘れた場合のフローを示すスクリーンショット。

  1. フランスで休暇を過ごしている NOAM のユーザーが、myapp.fr にサインインを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーが EMEA Azure AD B2C テナントにアクセスし、[パスワードを忘れた場合] を選択します。 ユーザーがメールアドレスを入力して検証します。

  4. メールアドレスの参照が実行され、ユーザーが存在するリージョンのテナントが特定されます。

  5. メールアドレスが NOAM Azure AD B2C テナントに存在することがわかりました。 ユーザーが新しいパスワードを指定します。

  6. この新しいパスワードが、Graph API 呼び出しを介して NOAM Azure AD B2C テナントに書き込まれます。

  7. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  8. ファネル テナントで、アプリケーションにトークンが発行されます。

ローカル ユーザーによるパスワードの変更

このユース ケースは、ユーザーがアカウントを登録したリージョンにログインした後にパスワードを変更する方法を示しています。

ローカル ユーザーがパスワードを変更する場合のフローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカのユーザーが、myapp.fr にログイン後、[パスワードの変更] を選択します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーは EMEA Azure AD B2C テナントにアクセスし、シングル サインオン (SSO) の Cookie 設定により、すぐにパスワードを変更できます。

  4. 新しいパスワードが、EMEA Azure AD B2C テナントのユーザー アカウントに書き込まれます。

  5. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  6. ファネル テナントで、アプリケーションにトークンが発行されます。

移動中のユーザーによるパスワードの変更

このユース ケースは、アカウントを登録したリージョンから離れているユーザーが、ログイン後にパスワードを変更する方法を示しています。

移動中のユーザーがパスワードを変更する場合のフローを示すスクリーンショット。

  1. NOAM のユーザーが、myapp.fr にログイン後、[パスワードの変更] を試みます。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーは EMEA Azure AD B2C テナントにアクセスし、SSO の Cookie 設定により、すぐにパスワードを変更できます。

  4. グローバル ルックアップ テーブルを確認した結果、ユーザーのメールアドレスが NOAM テナントに存在することがわかりました。

  5. 新しいパスワードが、MS Graph API 呼び出しによって NOAM Azure AD B2C テナントのユーザー アカウントに書き込まれます。

  6. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  7. ファネル テナントで、アプリケーションにトークンが発行されます。

フェデレーション ID プロバイダーの認証

以下のユース ケースは、フェデレーション ID を使用して Azure AD B2C クライアントとしてサインアップまたはサインインする例を示しています。

ローカル フェデレーション ID を使用したサインアップ

このユース ケースは、ユーザーがローカル リージョンからフェデレーション ID を使用してサービスにサインアップする方法を示しています。

フェデレーション ID でサインアップする場合のフローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインアップを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーが、フェデレーション ID プロバイダー (IdP) を使用してサインインすることを選択します。

  4. グローバル ルックアップ テーブルの参照が実行されます。

    • アカウント リンクがスコープ内にある場合: フェデレーション IdP 識別子またはフェデレーション IdP から返されたメールアドレスがルックアップ テーブルに存在しない場合は続行されます。

    • アカウント リンクがスコープ内にない場合: フェデレーション IdP から返されたフェデレーション IdP 識別子がルックアップ テーブルに存在しない場合は続行されます。

  5. EMEA Azure AD B2C テナントにユーザー アカウントが書き込まれます。

  6. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  7. ファネル テナントで、アプリケーションにトークンが発行されます。

ローカル フェデレーション ユーザーによるサインイン

このユース ケースは、ユーザーがローカル リージョンからフェデレーション ID を使用してサービスにサインインする方法を示しています。

ローカル フェデレーション ユーザーがサインインする場合のフローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーが、フェデレーション ID プロバイダーを使用してサインインすることを選択します。

  4. グローバル ルックアップ テーブルの参照が実行され、ユーザーのフェデレーション ID が EMEA に登録されていることが確認されます。

  5. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  6. ファネル テナントで、アプリケーションにトークンが発行されます。

移動中のフェデレーション ユーザーによるサインイン

このユース ケースは、ユーザーがサインアップしたリージョンから離れているときに、フェデレーション IdP を使用して自分のアカウントにサインインする方法を示しています。

移動中のフェデレーション ユーザーがサインインする場合のフローを示すスクリーンショット。

  1. NOAM のユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーが、フェデレーション ID プロバイダーを使用してサインインすることを選択します。

    注意

    すべての Azure AD B2C リージョン テナントのソーシャル IdP でアプリ登録の同じアプリ ID を使用します。 これにより、ソーシャル IdP から返される ID が常に同じになります。

  4. グローバル ルックアップ テーブルの参照が実行され、ユーザーのフェデレーション ID が NOAM に登録されていることが特定されます。

  5. NOAM Azure AD B2C テナントから MS Graph API を使用してアカウント データが読み取られます。

  6. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  7. ファネル テナントで、アプリケーションにトークンが発行されます。

一致条件を使用したアカウント リンク

このユース ケースは、一致条件が満たされたときにユーザーがアカウント リンクを実行する方法を示しています。 一致条件は、通常、ユーザーのメール アドレスです。 新しい ID プロバイダーからのサインインの一致条件が、Azure AD B2C 内の既存のアカウントと同じ値である場合、アカウント リンク プロセスを開始できます。

フェデレーション アカウントをマージするためのフローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーが、フェデレーション ID プロバイダーまたはソーシャル IdP でサインインすることを選択します。

  4. フェデレーション IdP から返された ID に対してグローバル ルックアップ テーブルの参照が実行されます。

  5. ID は存在しないが、フェデレーション IdP からのメールアドレスが EMEA Azure AD B2C に存在する場合、アカウント リンクのユース ケースです。

  6. ディレクトリからユーザーが読み取られ、アカウントで有効な認証方法が特定されます。 ユーザーがこのアカウントの既存の認証方法でサインインするための画面が表示されます。

  7. ユーザーが Azure AD B2C のアカウントを所有していることが証明されると、新しいソーシャル ID が既存のアカウントに追加され、グローバル ルックアップ テーブルのアカウントにソーシャル ID が追加されます。

  8. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  9. ファネル テナントで、アプリケーションにトークンが発行されます。

一致条件を使用した移動中ユーザーのアカウント リンク

このユース ケースは、一致条件が満たされた場合に、非ローカル ユーザーがアカウント リンクを実行できる方法を示しています。 一致条件は、通常、ユーザーのメール アドレスです。 新しい ID プロバイダーからのサインインの一致条件が、Azure AD B2C 内の既存のアカウントと同じ値である場合、アカウント リンク プロセスを開始できます。

移動中のフェデレーション ユーザーをマージするためのフローを示すスクリーンショット。

  1. NOAM のユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル アプリケーション インスタンスに送信されない場合、トラフィック マネージャーは、リダイレクトを強制します。

  2. ユーザーがグローバル ファネル Azure AD B2C テナントに到達します。 このテナントは、OpenId フェデレーションを使用し、いくつかの条件に基づいて、リージョンの Azure AD B2C テナントにリダイレクトするように構成されています。 これは、Application clientId に基づく参照にすることができます。

  3. ユーザーが、フェデレーション ID プロバイダーまたはソーシャル IdP でサインインすることを選択します。

  4. フェデレーション IdP から返された ID に対してグローバル ルックアップ テーブルの参照が実行されます。

  5. ID が存在せず、フェデレーション IdP からのメールアドレスが別のリージョンに存在する場合、これは、移動中ユーザーのアカウント リンクのユース ケースです。

  6. 現在収集されているユーザーの要求をアサートする id_token_hint リンクが作成されます。 フェデレーションを使用して NOAM Azure AD B2C テナントに体験がブートストラップされます。 ユーザーは、NOAM Azure AD B2C テナントを介して、アカウントを所有していることを証明します。

    Note

    この方法は、ホーム テナント内の既存のアカウント リンク ロジックを再利用し、ID コレクションを操作するための外部 API 呼び出しを減らすために使用されます。 id_token_hint を利用するカスタム ポリシーのサンプルについては、こちらを参照してください。

  7. ユーザーが Azure AD B2C のアカウントを所有していることが証明されると、NOAM Azure AD B2C テナントへの Graph API 呼び出しが行われ、既存のアカウントに新しいソーシャル ID が追加されます。 グローバル ルックアップ テーブルのアカウントにソーシャル ID が追加されます。

  8. リージョンのテナントで、ファネル テナントにトークンが再発行されます。

  9. ファネル テナントで、アプリケーションにトークンが発行されます。

次の手順