別の Azure AD B2C テナントの Azure AD B2C アカウントを使用したサインアップとサインインを設定する

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

注意

Azure Active Directory B2C で、カスタム ポリシーは、主に、複雑なシナリオに取り組む用途向けに設計されています。 ほとんどのシナリオで、組み込みユーザー フローを使用することをお勧めします。 まだ行っていない場合は、Active Directory B2C でのカスタム ポリシーの概要に関する記事で、カスタム ポリシー スターター パックの詳細を確認してください。

概要

この記事では、別の Azure AD B2C テナントとのフェデレーションを設定する方法について説明します。 アプリケーションが Azure AD B2C で保護されている場合、これにより、他の Azure AD B2C のユーザーが既存のアカウントを使用してログインできるようになります。 次の図では、ユーザーは、Contoso の Azure AD B2C によって保護されているアプリケーションに、Fabrikam の Azure AD B2C テナントによって管理されているアカウントを使用してサインインできます。 この場合、Contoso の Azure AD B2C によって保護されたアプリケーションでサインインを試みる前に、ユーザー アカウントが Fabrikam のテナントに存在している必要があります。

Azure AD B2C federation with another Azure AD B2C tenant

前提条件

アプリケーションのパブリッシャー ドメインを検証する

2020 年 11 月現在、新しいアプリケーション登録は、アプリケーションの発行元ドメインが検証済み"かつ"会社の ID が Microsoft Partner Network で検証され、アプリケーションに関連付けられている場合を除き、ユーザーの同意プロンプトで未検証として表示されます。 (この変更の詳細についてはこちらを参照してください)。Azure AD B2C ユーザー フローの場合、発行元のドメインは、Microsoft アカウントまたはその他の Microsoft Entra テナントを ID プロバイダーとして使用する場合にのみ表示されることに注意してください。 これらの新しい要件を満たすには、以下を実行します。

  1. 自分の Microsoft Partner Network (MPN) アカウントを使用して会社 ID を確認します。 このプロセスにより、会社と会社の主要連絡先に関する情報が検証されます。
  2. 発行元の確認プロセスを完了し、次のいずれかのオプションを使用して、MPN アカウントをアプリ登録に関連付けます。

Azure AD B2C アプリケーションを作成する

別の Azure AD B2C テナント (例: Fabrikam) のアカウントを持つユーザーが、Azure AD B2C (例: Contoso) にサインインできるようにするには、次のようにします。

  1. ユーザー フローまたはカスタム ポリシーを作成します。
  2. 次に、このセクションの説明に従い、Azure AD B2C でアプリケーションを作成します。

アプリケーションを作成するには:

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

  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。

  3. Azure portal で、 [Azure AD B2C] を検索して選択します。

  4. [アプリの登録] を選択し、 [新規登録] を選択します。

  5. アプリケーションの名前を入力します。 たとえば、"ContosoApp" などです。

  6. [サポートされているアカウントの種類] で、 [Accounts in any identity provider or organizational directory (for authenticating users with user flows)]((ユーザー フローを使用してユーザーを認証するための) 任意の ID プロバイダーまたは組織のディレクトリのアカウント) を選択します。

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

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

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

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

  8. [アクセス許可] で、 [openid と offline_access アクセス許可に対して管理者の同意を付与します] チェック ボックスをオンにします。

  9. [登録] を選択します。

  10. [Azure AD B2C - アプリの登録] ページで、作成したアプリケーション (例: ContosoApp) を選択します。

  11. アプリケーションの [概要] ページに表示されている [アプリケーション (クライアント) ID] を記録します。 これは、次のセクションで ID プロバイダーを構成するときに必要です。

  12. 左側のメニューで、[管理][証明書とシークレット] を選択します。

  13. [新しいクライアント シークレット] を選択します。

  14. [説明] ボックスにクライアント シークレットの説明を入力します。 たとえば、clientsecret1 のようにします。

  15. [有効期限] で、シークレットが有効な期間を選択してから、 [追加] を選択します。

  16. シークレットのを記録します。 これは、次のセクションで ID プロバイダーを構成するときに必要です。

Azure AD B2C を ID プロバイダーとして構成する

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

  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。

  3. Azure portal の左上隅にある [すべてのサービス] を選択してから、 [Azure AD B2C] を検索して選択します。

  4. [ID プロバイダー] を選択してから、 [新しい OpenID Connect プロバイダー ] を選択します。

  5. [名前] を入力します。 たとえば、「Fabrikam」と入力します。

  6. [メタデータ URL] に、次の URL を入力します。{tenant} は、お使いの Azure AD B2C テナントのドメイン名 (例: Fabrikam) に置き換えます。 {policy} は、もう一方のテナントで構成したポリシー名に置き換えます。

    https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/v2.0/.well-known/openid-configuration
    

    たとえば、「 https://fabrikam.b2clogin.com/fabrikam.onmicrosoft.com/B2C_1_susi/v2.0/.well-known/openid-configuration 」のように入力します。

  7. [クライアント ID] には、前に記録したアプリケーション ID を入力します。

  8. [クライアント シークレット] には、前に記録したクライアント シークレットを入力します。

  9. [スコープ] で、openid を入力します。

  10. [応答の種類] および [応答モード] の既定値はそのままにします。

  11. (省略可能) [ドメインのヒント] に、直接サインインに使用するドメイン名を入力します。 たとえば、fabrikam.com などです。

  12. [ID プロバイダー要求のマッピング] で、次の要求を入力します。

    • [ユーザー ID] : sub
    • [表示名] : name
    • [名] : given_name
    • [姓] : family_name
    • [電子メール] : email
  13. [保存] を選択します。

ユーザー フローに Azure AD B2C ID プロバイダーを追加する

  1. Azure AD B2C テナントで、 [ユーザー フロー] を選択します。
  2. Azure AD B2C ID プロバイダーを追加するユーザー フローをクリックします。
  3. [ソーシャル ID プロバイダー][Fabrikam] を選択します。
  4. [保存] を選択します。
  5. ポリシーをテストするには、 [ユーザー フローを実行します] を選択します。
  6. [アプリケーション] には、以前に登録した testapp1 という名前の Web アプリケーションを選択します。 [応答 URL]https://jwt.ms と表示されます。
  7. [ユーザー フローを実行します] ボタンを選択します。
  8. サインアップまたはサインイン ページで Fabrikam を選択して、他の Azure AD B2C テナントを使用してサインインします。

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

ポリシー キーを作成する

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

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

Azure AD B2C を ID プロバイダーとして構成する

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

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

  1. TrustFrameworkExtensions.xml ファイルを開きます。

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

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

    <ClaimsProvider>
      <Domain>fabrikam.com</Domain>
      <DisplayName>Federation with Fabrikam tenant</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="AzureADB2CFabrikam-OpenIdConnect">
        <DisplayName>Fabrikam</DisplayName>
        <Protocol Name="OpenIdConnect"/>
        <Metadata>
          <!-- Update the Client ID below to the Application ID -->
          <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item>
          <!-- Update the metadata URL with the other Azure AD B2C tenant name and policy name -->
          <Item Key="METADATA">https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/v2.0/.well-known/openid-configuration</Item>
          <Item Key="UsePolicyInRedirectUri">false</Item>
          <Item Key="response_types">code</Item>
          <Item Key="scope">openid</Item>
          <Item Key="response_mode">form_post</Item>
          <Item Key="HttpBinding">POST</Item>
        </Metadata>
        <CryptographicKeys>
          <Key Id="client_secret" StorageReferenceId="B2C_1A_FabrikamAppSecret"/>
        </CryptographicKeys>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
          <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
          <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name" />
          <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
          <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
          <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss"  />
          <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
          <OutputClaim ClaimTypeReferenceId="otherMails" PartnerClaimType="emails"/>    
        </OutputClaims>
        <OutputClaimsTransformations>
          <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
          <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
          <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
        </OutputClaimsTransformations>
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
      </TechnicalProfile>
     </TechnicalProfiles>
    </ClaimsProvider>
    
  4. 関連する値を使用して、次の XML 要素を更新します。

    XML 要素
    ClaimsProvider\Domain 直接サインインに使用するドメイン名。 直接サインインに使用するドメイン名を入力します。 たとえば、fabrikam.com などです。
    TechnicalProfile\DisplayName この値は、サインイン画面のサインイン ボタン上に表示されます。 たとえば、"Fabrikam" などです。
    Metadata\client_id ID プロバイダーのアプリケーション識別子。 他の Azure AD B2C テナントで前に作成したアプリケーション ID を使用して、クライアント ID を更新します。
    Metadata\METADATA OpenID の既知の構成エンドポイントとも呼ばれる OpenID Connect ID プロバイダー構成ドキュメントを指す URL。 次の URL を入力します。{tenant} は、他の Azure AD B2C テナントのドメイン名 (Fabrikam) に置き換えます。 {tenant} は、もう一方のテナントで構成したポリシー名に置き換えます。{policy] はポリシー名 https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/v2.0/.well-known/openid-configuration に置き換えます。 たとえば、「 https://fabrikam.b2clogin.com/fabrikam.onmicrosoft.com/B2C_1_susi/v2.0/.well-known/openid-configuration 」のように入力します。
    CryptographicKeys StorageReferenceId の値を、前に作成したポリシー キーの名前に更新します。 たとえば、「 B2C_1A_FabrikamAppSecret 」のように入力します。

ユーザー体験を追加する

この時点では、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="AzureADB2CFabrikamExchange" />
  </ClaimsProviderSelections>
  ...
</OrchestrationStep>

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="AzureADB2CFabrikamExchange" TechnicalProfileReferenceId="AzureADB2CFabrikam-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. サインアップまたはサインイン ページで Fabrikam を選択して、他の Azure AD B2C テナントを使用してサインインします。

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

次のステップ

他の Azure AD B2C トークンをアプリケーションに渡す方法について学習する。