Azure Active Directory B2C のカスタム ポリシーを使ってマルチテナント Microsoft Entra ID のサインインを設定する

開始する前に[ポリシーの種類の選択] セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。

この機能は、カスタム ポリシーでのみ使用できます。 セットアップ手順は、前のセレクターで [カスタム ポリシー] を選択します。

この記事では、Microsoft Entra ID のマルチテナント エンドポイントを使ってユーザーのサインインを有効にする方法について説明します。 テナントごとに ID プロバイダーを構成しなくても、複数の Microsoft Entra テナントのユーザーが Azure AD B2C を使ってサインインできるようになります。 ただし、これらのテナントのいずれのゲスト メンバーもサインインはできません。 そのため、各テナントを個別に構成する必要があります。

前提条件

注意

この記事では、前提条件で述べる前のステップで SocialAndLocalAccounts スターター パックを使用することを想定しています。

Microsoft Entra アプリを登録する

Azure Active Directory B2C (Azure AD B2C) で Microsoft Entra アカウントを持つユーザーのサインインを有効にするには、Azure portal でアプリケーションを作成する必要があります。 詳細については、Microsoft ID プラットフォームにアプリケーションを登録する方法に関するページを参照してください。

  1. Azure portal にサインインします。

  2. 複数のテナントにアクセスできる場合は、上部のメニュー内の設定アイコンを選択し、[ディレクトリとサブスクリプション] メニューから、ご利用の Microsoft Entra ID テナントに切り替えます。

  3. Azure portal の左上隅にある [すべてのサービス] を選択し、 [アプリの登録] を検索して選択します。

  4. [新規登録] を選択します。

  5. アプリケーションの [名前] を入力します。 たとえば、Azure AD B2C App のようにします。

  6. このアプリケーションに [任意の組織ディレクトリ内のアカウント (任意の Microsoft Entra ディレクトリ - マルチテナント)] を選びます。

  7. [リダイレクト URL] では、値 [Web] をそのまま使用し、次の URL をすべて小文字で入力します。your-B2C-tenant-name は、お使いの Azure AD B2C テナントの名前に置き換えます。

    https://your-B2C-tenant-name.b2clogin.com/your-B2C-tenant-name.onmicrosoft.com/oauth2/authresp
    

    たとえば、「 https://fabrikam.b2clogin.com/fabrikam.onmicrosoft.com/oauth2/authresp 」のように入力します。

    カスタム ドメインを使用する場合は、「https://your-domain-name/your-tenant-name.onmicrosoft.com/oauth2/authresp」と入力します。 your-domain-name を実際のカスタム ドメインに、your-tenant-name を実際のテナントの名前に置き換えます。

  8. [登録] を選択します。 後の手順で使用するために、アプリケーション (クライアント) ID を記録しておきます。

  9. [証明書とシークレット] を選択してから、[新しいクライアント シークレット] を選択します。

  10. シークレットの説明を入力し、有効期限を選択して、 [追加] を選択します。 後の手順で使用するために、シークレットのを記録しておきます。

省略可能な要求の構成

Microsoft Entra ID から family_name および given_name 要求を取得する場合は、Azure portal UI またはアプリケーション マニフェストでアプリケーションの省略可能な要求を構成できます。 詳細については、Microsoft Entra アプリに省略可能な要求を提供する方法に関するページを参照してください。

  1. Azure portal にサインインします。 Microsoft Entra ID を検索して選択します。
  2. [管理] セクションで、 [アプリの登録] を選択します。
  3. 省略可能な要求を構成するアプリケーションを一覧から選択します。
  4. [管理] セクションで、 [トークン構成] を選択します。
  5. [省略可能な要求を追加] を選択します。
  6. [トークンの種類] で、 [ID] を選択します。
  7. 追加する省略可能な要求 (family_namegiven_name) を選択します。
  8. [追加] を選択します。 [Microsoft Graph 電子メールのアクセス許可を有効にします (要求がトークンに表示されるために必要)] が表示される場合は、それを有効にしてから再度 [追加] を選択します。

[省略可能] アプリの信頼性を確認する

発行元の確認により、ユーザーは、登録したアプリの信頼性を把握できます。 検証済みアプリは、アプリの発行元が、Microsoft Partner Network (MPN) を使用して ID を検証したことを意味します。 アプリを発行者確認済みとしてマークする方法についてご確認ください。

ポリシー キーを作成する

作成したアプリケーション キーを Azure AD B2C テナントに格納する必要があります。

  1. 複数のテナントにアクセスできる場合は、上部のメニュー内の設定アイコンを選択し、[ディレクトリとサブスクリプション] メニューから、ご利用の Azure AD B2C テナントに切り替えます。
  2. Azure portal の左上隅にある [すべてのサービス] を選択してから、 [Azure AD B2C] を検索して選択します。
  3. [ポリシー][Identity Experience Framework] を選択します。
  4. [ポリシー キー] を選択し、 [追加] を選択します。
  5. オプションについては、Manualを選択します。
  6. ポリシー キーの名前を入力します。 たとえば、「 AADAppSecret 」のように入力します。 作成時に、プレフィックス B2C_1A_ がキーの名前に自動的に追加されるため、次のセクションの XML での参照は B2C_1A_AADAppSecret になります。
  7. [シークレット] に、前に記録したクライアント シークレットを入力します。
  8. [キー使用法] として [Signature] を選択します。
  9. [作成] を選択します

Microsoft Entra ID を ID プロバイダーとして構成する

ユーザーが Microsoft Entra アカウントを使用してサインインできるようにするには、Microsoft Entra ID を Azure AD B2C がエンドポイント経由で通信できるクレーム プロバイダーとして定義する必要があります。 エンドポイントは、特定のユーザーが認証されていることを確認するために Azure AD B2C で使う一連の要求を提供します。

ポリシーの拡張ファイル内で Microsoft Entra ID を ClaimsProvider 要素に追加することで、Microsoft Entra ID をクレーム プロバイダーとして定義できます。

  1. SocialAndLocalAccounts/TrustFrameworkExtensions.xmlファイルを開きます (前提条件で使用したファイルを参照してください)。

  2. ClaimsProviders 要素を見つけます。 存在しない場合は、それをルート要素の下に追加します。

  3. 新しい ClaimsProvider を次のように追加します。

    <ClaimsProvider>
      <Domain>commonaad</Domain>
      <DisplayName>Common AAD</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="AADCommon-OpenIdConnect">
          <DisplayName>Multi-Tenant AAD</DisplayName>
          <Description>Login with your Contoso account</Description>
          <Protocol Name="OpenIdConnect"/>
          <Metadata>
            <Item Key="METADATA">https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration</Item>
            <!-- Update the Client ID below to the Application ID -->
            <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item>
            <Item Key="response_types">code</Item>
            <Item Key="scope">openid profile</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">false</Item>
            <Item Key="DiscoverMetadataByTokenIssuer">true</Item>
            <!-- The key below allows you to specify each of the Azure AD tenants that can be used to sign in. Update the GUIDs below for each tenant. -->
            <Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000,https://login.microsoftonline.com/11111111-1111-1111-1111-111111111111</Item>
            <!-- The commented key below specifies that users from any tenant can sign-in. Uncomment if you would like anyone with an Azure AD account to be able to sign in. -->
            <!-- <Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com/</Item> -->
          </Metadata>
          <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_AADAppSecret"/>
          </CryptographicKeys>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/>
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
            <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" />
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
  4. ClaimsProvider 要素の下で、Domain の値を、他の ID プロバイダーと区別するために使用できる一意の値に更新します。

  5. TechnicalProfile 要素の下で、DisplayName の値を更新します (例: Multi-Tenant AAD)。 この値は、サインイン ページのサインイン ボタン上に表示されます。

  6. client_id は、前に登録した Microsoft Entra マルチテナント アプリケーションのアプリケーション ID に設定します。

  7. CryptographicKeys で、StorageReferenceId の値を、前に作成したポリシー キーの名前に更新します。 たとえば、「 B2C_1A_AADAppSecret 」のように入力します。

アクセスを制限する

ValidTokenIssuerPrefixes の値として https://login.microsoftonline.com/ を使うと、すべての Microsoft Entra ユーザーがアプリケーションにサインインできるようになります。 有効なトークン発行者の一覧を更新し、サインインできる Microsoft Entra テナント ユーザーの特定の一覧へのアクセスを制限します。

値を取得するには、サインインさせるユーザーの Microsoft Entra テナントごとに、OpenID Connect Discovery のメタデータを調べます。 メタデータの URL の形式は、https://login.microsoftonline.com/your-tenant/v2.0/.well-known/openid-configuration のようになっています。your-tenant は Microsoft Entra テナントの名前です。 次に例を示します。

https://login.microsoftonline.com/fabrikam.onmicrosoft.com/v2.0/.well-known/openid-configuration

サインインに使用する Microsoft Entra テナントごとに次の手順を実行します。

  1. ブラウザーを開き、そのテナントに対応する OpenID Connect のメタデータ URL に移動します。 issuerオブジェクトを探し、その値を記録します。 https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000/v2.0 のようになっていると思います。
  2. その値をコピーして ValidTokenIssuerPrefixes キーに貼り付けます。 複数の発行者は、コンマで区切ります。 前出の ClaimsProvider XML サンプルでは、発行者が 2 つ存在する例を確認できます。

ユーザー体験を追加する

この時点では、ID プロバイダーはセットアップされていますが、サインイン ページではまだ使用できません。 独自のカスタム ユーザー体験がない場合は、既存のテンプレート ユーザー体験の複製を作成してください。そうでない場合は、次の手順に進みます。

  1. スターター パックから TrustFrameworkBase.xml ファイルを開きます。
  2. Id="SignUpOrSignIn" を含む UserJourney 要素を見つけ、その内容全体をコピーします。
  3. TrustFrameworkExtensions.xml を開き、UserJourneys 要素を見つけます。 要素が存在しない場合は追加します。
  4. コピーした UserJourney 要素の内容全体を UserJourneys 要素の子として貼り付けます。
  5. ユーザー体験の ID の名前を変更します。 たとえば、「 Id="CustomSignUpSignIn" 」のように入力します。

ユーザー体験に ID プロバイダーを追加する

これでユーザー体験ができたので、ユーザー体験に新しい ID プロバイダーを追加します。 最初にサインイン ボタンを追加してから、ボタンをアクションにリンクします。 アクションは、前に作成した技術プロファイルです。

  1. ユーザー体験内で、Type="CombinedSignInAndSignUp" または Type="ClaimsProviderSelection" を含むオーケストレーション ステップ要素を見つけます。 これは通常、最初のオーケストレーション ステップです。 ClaimsProviderSelections 要素には、ユーザーがサインインに使用できる ID プロバイダーの一覧が含まれています。 要素の順序により、ユーザーに表示されるサインイン ボタンの順序が制御されます。 ClaimsProviderSelection XML 要素を追加します。 TargetClaimsExchangeId の値をフレンドリ名に設定します。

  2. 次のオーケストレーション ステップで、ClaimsExchange 要素を追加します。 ID を、ターゲットの要求交換 ID の値に設定します。TechnicalProfileReferenceId の値を、前に作成した技術プロファイルの ID に更新します。

次の XML は、ID プロバイダーを使用したユーザー体験の最初の 2 つのオーケストレーション ステップを示しています。

<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
  <ClaimsProviderSelections>
    ...
    <ClaimsProviderSelection TargetClaimsExchangeId="AzureADCommonExchange" />
  </ClaimsProviderSelections>
  ...
</OrchestrationStep>

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="AzureADCommonExchange" TechnicalProfileReferenceId="AADCommon-OpenIdConnect" />
  </ClaimsExchanges>
</OrchestrationStep>

証明書利用者ポリシーを構成する

証明書利用者ポリシー (例 SignUpSignIn.xml) は、Azure AD B2C が実行されるユーザー体験を指定します。 証明書利用者内の DefaultUserJourney 要素を検索します。 ID プロバイダーを追加したユーザー体験 ID と一致するように ReferenceId を更新します。

次の例では、CustomSignUpSignIn ユーザー体験について、ReferenceIdCustomSignUpSignIn に設定しています。

<RelyingParty>
  <DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
  ...
</RelyingParty>

カスタム ポリシーをアップロードする

  1. Azure portal にサインインします。
  2. ポータル ツール バーにある [ディレクトリ + サブスクリプション] アイコンを選択し、Azure AD B2C テナントを含むディレクトリを選択します。
  3. Azure portal で、 [Azure AD B2C] を検索して選択します。
  4. [ポリシー][Identity Experience Framework] を選択します。
  5. [カスタム ポリシーのアップロード] を選択し、変更した 2 つのポリシー ファイルを拡張ポリシー (TrustFrameworkExtensions.xml など)、証明書利用者ポリシー (SignUpSignIn.xmlなど) の順序でアップロードします。

カスタム ポリシーのテスト

  1. 証明書利用者ポリシー (B2C_1A_signup_signin など) を選択します。
  2. [アプリケーション] には、前に登録した Web アプリケーションを選択します。 [応答 URL]https://jwt.ms と表示されます。
  3. [今すぐ実行] ボタンを選択します。
  4. サインアップまたはサインイン ページで [Common Microsoft Entra ID] (共通の Microsoft Entra ID) を選び、Microsoft Entra アカウントでサインインします。

マルチテナントのサインイン機能をテストするために、別の Microsoft Entra テナントに存在するユーザーの資格情報を使って、最後の 2 つの手順を実行してください。 [今すぐ実行のエンドポイント] をコピーし、プライベート ブラウザー ウィンドウ (Google のシークレット モード、Microsoft Edge の InPrivate ウィンドウなど) で開きます。 プライベート ブラウザー ウィンドウで開くと、現在キャッシュされている Microsoft Entra の資格情報を使わずに、ユーザー体験を全体的にテストできます。

サインイン プロセスが成功すると、ブラウザーは https://jwt.ms にリダイレクトされ、Azure AD B2C によって返されたトークンの内容が表示されます。

次のステップ