ファネルベースの構成の Azure Active Directory B2C グローバル ID フレームワーク概念実証

次のセクションでは、ファネルベースのオーケストレーションの概念実証の実装を作成する方法について説明します。 完全な Azure Active Directory B2C (Azure AD B2C) カスタム ポリシーについては、こちらを参照してください。

ファネルベースのアプローチ

次のブロック図は、概念実証を示しています。 このガイダンスでは、Azure AD B2C テナントを構成する方法について説明します。 外部 API レイヤーと地域分散ルックアップ テーブルは、このガイドの一部として含まれていません。

ファネルベースのアプローチのブロック図を示すスクリーンショット。

ファネル テナント

  1. テナントを作成します。

  2. 各 Azure AD B2C テナント/ポリシーの組み合わせに対してフェデレーションを構成します

  3. リージョンへの client_id マッピングを構成し、検索要求変換を使用してエミュレートします。

    <ClaimsTransformation Id="ClientIdToRegion" TransformationMethod="LookupValue">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="regionFromURL" TransformationClaimType="inputParameterId" />
      </InputClaims>
      <InputParameters>
        <InputParameter Id="0dd7579e-fb90-4178-bc36-77a3fe658683" DataType="string" Value="APAC" />
        <InputParameter Id="7e7f5403-b3d7-41cc-85fc-130ab6fd9361" DataType="string" Value="NOAM" />
        <InputParameter Id="4ea5d578-9c51-4091-96d1-58e15e98e9b9" DataType="string" Value="EMEA" />
        <InputParameter Id="errorOnFailedLookup" DataType="boolean" Value="false" />
      </InputParameters>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="sendToRegion" TransformationClaimType="outputClaim" />
      </OutputClaims>
    </ClaimsTransformation>
    
  4. client_id リージョン マッピングに基づいてフェデレーションを有効にするように構成します。

    <TechnicalProfile Id="HRDLogic">
      <DisplayName>ParseDomainHint</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
      </Metadata>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="regionFromURL" DefaultValue="{OIDC:ClientId}" AlwaysUseDefaultValue="true" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="sendToRegion" />
        <OutputClaim ClaimTypeReferenceId="identityProviders" />
      </OutputClaims>
      <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="ClientIdToRegion" />
        <OutputClaimsTransformation ReferenceId="CreateidentityProvidersCollection" />
      </OutputClaimsTransformations>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
    </TechnicalProfile>
    

リージョン テナント

  1. テナントを作成します。

  2. アプリケーションの登録を作成して、ファネル テナントとのフェデレーションを確立します。

サインイン

  1. グローバル ルックアップ テーブルを使用してリージョン検索の識別子を構成し、検索要求変換を使用してエミュレートします。

    <ClaimsTransformation Id="UserIdToRegion" TransformationMethod="LookupValue">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputParameterId" />
      </InputClaims>
      <InputParameters>
        <InputParameter Id="bob@noam.com" DataType="string" Value="NOAM" />
        <InputParameter Id="bob@noam1.com" DataType="string" Value="NOAM" />
        <InputParameter Id="john@emea.com" DataType="string" Value="EMEA" />
        <InputParameter Id="john@emea1.com" DataType="string" Value="EMEA" />
        <InputParameter Id="alice@apac.com" DataType="string" Value="APAC" />
        <InputParameter Id="alice@apac1.com" DataType="string" Value="APAC" />
        <InputParameter Id="errorOnFailedLookup" DataType="boolean" Value="false" />
      </InputParameters>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="userLookupRegion" TransformationClaimType="outputClaim" />
      </OutputClaims>
    </ClaimsTransformation>
    
  2. 移動中ユーザーの API ベースの認証を構成し、MS Graph API 呼び出しでユーザー プロファイルをフェッチします。

    1. 資格情報を確認し、それぞれのテナントから MS Graph API トークンを取得します。 委任されたアクセス許可 (user.read) の MS Graph API へのアクセス許可を使用して、各リージョン テナントでネイティブ アプリの登録を行います。

      <TechnicalProfile Id="REST-login-NonInteractive-APAC">
        <DisplayName>non interactive authentication to APAC</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <Metadata>
          <Item Key="ServiceUrl">https://login.microsoftonline.com/b2capac.onmicrosoft.com/oauth2/v2.0/token</Item>
          <Item Key="AuthenticationType">None</Item>
          <Item Key="SendClaimsIn">Form</Item>
          <Item Key="AllowInsecureAuthInProduction">true</Item>
        </Metadata>
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="apac_client_id" PartnerClaimType="client_id" DefaultValue="cf3f6898-9a79-426a-ba16-10e1a377c843" />
          <InputClaim ClaimTypeReferenceId="ropc_grant_type" PartnerClaimType="grant_type" DefaultValue="password" />
          <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="username" />
          <InputClaim ClaimTypeReferenceId="password" />
          <InputClaim ClaimTypeReferenceId="scope" DefaultValue="https://graph.microsoft.com/.default" AlwaysUseDefaultValue="true" />
          <InputClaim ClaimTypeReferenceId="nca" PartnerClaimType="nca" DefaultValue="1" />
        </InputClaims>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="bearerToken" PartnerClaimType="access_token" />
        </OutputClaims>
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
      </TechnicalProfile>
      
    2. MS Graph API を介して移動中ユーザーのプロファイルを読み取ります。

      <TechnicalProfile Id="Azure AD-Read-User-MSGraph">
        <DisplayName>revoke my refresh token</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <Metadata>
          <Item Key="ServiceUrl">https://graph.microsoft.com/beta/me</Item>
          <Item Key="AuthenticationType">Bearer</Item>
          <Item Key="UseClaimAsBearerToken">bearerToken</Item>
          <Item Key="SendClaimsIn">Url</Item>
          <Item Key="DebugMode">true</Item>
        </Metadata>
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="bearerToken" />
        </InputClaims>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="id" />
          <OutputClaim ClaimTypeReferenceId="givenName" />
          <OutputClaim ClaimTypeReferenceId="surName" />
          <OutputClaim ClaimTypeReferenceId="displayName" />
          <OutputClaim ClaimTypeReferenceId="userPrincipalName" PartnerClaimType="upn" />
          <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
        </OutputClaims>
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
      </TechnicalProfile>
      

サインアップ

ユーザー リージョンをグローバル ルックアップ テーブルに書き込みます。

Note

ハードコーディングされたルックアップ テーブルが原因でセットアップが行われません。

パスワードのリセット

  1. グローバル ルックアップ テーブルを使用してリージョン検索の識別子を構成します。

    Note

    ハードコーディングされたルックアップ テーブルが原因でセットアップが行われません。

  2. REST API 呼び出しを使用してテナント間のパスワード リセットを構成します。

    Note

    client_credential 認証とサービス プリンシパルに適用されるユーザー管理ロールを使用するブローカー API が必要になります。

次の手順