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

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

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

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

ローカル アカウント認証

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

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

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

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

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

  2. ユーザーが EMEA テナントにアクセスします。

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

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

  5. リージョン テナントで、アプリにトークンが再発行されます。

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

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

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

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

  2. ユーザーが EMEA テナントにアクセスします。

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

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

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

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

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

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

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル ホスト名に送信されない場合、トラフィック マネージャーによってリダイレクトが適用されます。

  2. ユーザーが EMEA テナントにアクセスします。

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

  4. リージョン テナントで、アプリにトークンが再発行されます。

  5. ユーザーがアプリにサインインします。

移動中のユーザーのサインイン

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

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

  1. フランスで休暇を過ごしている北米 (NOAM) のユーザーが、myapp.fr にサインインを試みます。 このユーザーがローカル ホスト名に送信されない場合、トラフィック マネージャーによってリダイレクトが適用されます。

  2. ユーザーが EMEA テナントにアクセスします。

  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. リージョン テナントで、アプリにトークンが再発行されます。

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

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

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

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル ホスト名に送信されない場合、トラフィック マネージャーによってリダイレクトが適用されます。

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

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

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

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

  6. リージョン テナントで、アプリにトークンが再発行されます。

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

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

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

  1. フランスで休暇を過ごしている NOAM のユーザーが、myapp.fr にサインインを試みます。 このユーザーがローカル ホスト名に送信されない場合、トラフィック マネージャーによってリダイレクトが適用されます。

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

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

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

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

  6. リージョン テナントで、アプリにトークンが再発行されます。

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

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

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

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

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

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

  4. リージョン テナントで、アプリにトークンが再発行されます。

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

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

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

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

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

  3. グローバル ルックアップ テーブルの調査により、ユーザーのメールアドレスが NOAM テナントに存在することがわかりました。

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

  5. リージョン テナントで、アプリにトークンが再発行されます。

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

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

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

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

サインアップ フローを示すスクリーンショット。

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

  2. ユーザーが EMEA テナントにアクセスします。

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

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

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

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

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

  6. リージョン テナントで、アプリにトークンが再発行されます。

ローカル フェデレーション ユーザーのサインイン

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

サインイン フローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル ホスト名に送信されない場合、トラフィック マネージャーによってリダイレクトが適用されます。

  2. ユーザーが EMEA テナントにアクセスします。

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

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

  5. リージョン テナントで、アプリにトークンが再発行されます。

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

このシナリオは、サインアップしたリージョンから離れているユーザーが、フェデレーション IdP を使用してサービスにサインインする方法を示しています。

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

  1. NOAM のユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル ホスト名に送信されない場合、トラフィック マネージャーによってリダイレクトが適用されます。

  2. ユーザーが EMEA テナントにアクセスします。

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

    注意

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

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

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

  6. リージョン テナントで、アプリにトークンが再発行されます。

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

このシナリオは、一致条件 (通常はメールアドレス) が満たされた場合にユーザーがアカウント リンクを実行する方法を示しています。

アカウントのマージ/リンク フローを示すスクリーンショット。

  1. ヨーロッパ、中近東およびアフリカのユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル ホスト名に送信されない場合、トラフィック マネージャーによってリダイレクトが適用されます。

  2. ユーザーが EMEA テナントにアクセスします。

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

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

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

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

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

  8. リージョン テナントで、アプリにトークンが再発行されます。

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

このシナリオは、リージョンから離れているユーザーがアカウント リンクを実行する方法を示しています。

移動中ユーザーのアカウントの マージ/リンク フローを示すスクリーンショット。

  1. NOAM のユーザーが myapp.fr にサインインを試みます。 このユーザーがローカル ホスト名に送信されない場合、トラフィック マネージャーによってリダイレクトが適用されます。

  2. ユーザーが EMEA テナントにアクセスします。

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

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

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

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

    注意

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

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

  8. リージョン テナントで、アプリにトークンが再発行されます。

次の手順