カスタム ポリシーを使用して Azure Active Directory B2C に Azure Active Directory アカウントでサインインするように設定するSet up sign-in with an Azure Active Directory account using custom policies in Azure Active Directory B2C

注意

Azure Active Directory B2C で、カスタム ポリシーは、主に、複雑なシナリオに取り組む用途向けに設計されています。In Azure Active Directory B2C, custom policies are designed primarily to address complex scenarios. ほとんどのシナリオで、組み込みユーザー フローを使用することをお勧めします。For most scenarios, we recommend that you use built-in user flows.

この記事では、カスタム ポリシーを使用して、Azure Active Directory (Azure AD) 組織のユーザーが Azure Active Directory B2C (Azure AD B2C) にサインインできるようにする方法について説明します。This article shows you how to enable sign-in for users from an Azure Active Directory (Azure AD) organization by using custom policies in Azure Active Directory B2C (Azure AD B2C).

前提条件Prerequisites

Azure Active Directory B2C でのカスタム ポリシーの概要」にある手順を完了する。Complete the steps in Get started with custom policies in Azure Active Directory B2C.

アプリケーションを登録するRegister an application

特定の Azure AD 組織のユーザーのサインインを有効にするには、組織の Azure AD テナント内でアプリケーションを登録する必要があります。To enable sign-in for users from a specific Azure AD organization, you need to register an application within the organizational Azure AD tenant.

  1. Azure Portal にサインインします。Sign in to the Azure portal.

  2. 組織の Azure AD テナント (contoso.com など) が含まれているディレクトリを使用していることを確認します。Make sure you're using the directory that contains your organizational Azure AD tenant (for example, contoso.com). 上部のメニューで [ディレクトリ + サブスクリプション] フィルターを選択し、Azure AD テナントが含まれているディレクトリを選択します。Select the Directory + subscription filter in the top menu, and then choose the directory that contains your Azure AD tenant.

  3. Azure portal の左上隅にある [すべてのサービス] を選択し、 [アプリの登録] を検索して選択します。Choose All services in the top-left corner of the Azure portal, and then search for and select App registrations.

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

  5. アプリケーションの [名前] を入力します。Enter a Name for your application. たとえば、「 Azure AD B2C App 」のように入力します。For example, Azure AD B2C App.

  6. このアプリケーションには、 [この組織のディレクトリ内のアカウントのみ] という既定の選択をそのまま使用します。Accept the default selection of Accounts in this organizational directory only for this application.

  7. [リダイレクト URL] では、値 [Web] をそのまま使用し、次の URL をすべて小文字で入力します。your-B2C-tenant-name は、お使いの Azure AD B2C テナントの名前に置き換えます。For the Redirect URI, accept the value of Web, and enter the following URL in all lowercase letters, where your-B2C-tenant-name is replaced with the name of your Azure AD B2C tenant.

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

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

  8. [登録] を選択します。Select Register. 後の手順で使用するために、アプリケーション (クライアント) ID を記録しておきます。Record the Application (client) ID for use in a later step.

  9. [Certificates & secrets](証明書とシークレット) を選択してから、 [New client secret](新しいクライアント シークレット) を選択します。Select Certificates & secrets, and then select New client secret.

  10. シークレットの説明を入力し、有効期限を選択して、 [追加] を選択します。Enter a Description for the secret, select an expiration, and then select Add. 後の手順で使用するために、シークレットのを記録しておきます。Record the Value of the secret for use in a later step.

ポリシー キーを作成するCreate a policy key

作成したアプリケーション キーを Azure AD B2C テナントに格納する必要があります。You need to store the application key that you created in your Azure AD B2C tenant.

  1. ご自分の Azure AD B2C テナントが含まれるディレクトリを必ず使用してください。Make sure you're using the directory that contains your Azure AD B2C tenant. 上部のメニューにある [ディレクトリ + サブスクリプション] フィルターを選択し、Azure AD B2C テナントを含むディレクトリを選択します。Select the Directory + subscription filter in the top menu, and then choose the directory that contains your Azure AD B2C tenant.
  2. Azure portal の左上隅にある [すべてのサービス] を選択してから、 [Azure AD B2C] を検索して選択します。Choose All services in the top-left corner of the Azure portal, and then search for and select Azure AD B2C.
  3. [ポリシー][Identity Experience Framework] を選択します。Under Policies, select Identity Experience Framework.
  4. [ポリシー キー] を選択し、 [追加] を選択します。Select Policy keys and then select Add.
  5. オプションについては、Manualを選択します。For Options, choose Manual.
  6. ポリシー キーの名前を入力します。Enter a Name for the policy key. たとえば、「 ContosoAppSecret 」のように入力します。For example, ContosoAppSecret. 作成時に、プレフィックス B2C_1A_ がキーの名前に自動的に追加されるため、次のセクションの XML での参照は B2C_1A_ContosoAppSecret になります。The prefix B2C_1A_ is added automatically to the name of your key when it's created, so its reference in the XML in following section is to B2C_1A_ContosoAppSecret.
  7. [シークレット] に、前に記録したクライアント シークレットを入力します。In Secret, enter your client secret that you recorded earlier.
  8. [キー使用法] として [Signature] を選択します。For Key usage, select Signature.
  9. 作成 を選択します。Select Create.

クレーム プロバイダーを追加するAdd a claims provider

ユーザーが Azure AD を使用してサインインできるようにするには、エンドポイント経由で Azure AD B2C が通信できるクレーム プロバイダーとして Azure AD を定義する必要があります。If you want users to sign in by using Azure AD, you need to define Azure AD as a claims provider that Azure AD B2C can communicate with through an endpoint. エンドポイントは、特定のユーザーが認証されていることを確認するために Azure AD B2C で使う一連の要求を提供します。The endpoint provides a set of claims that are used by Azure AD B2C to verify that a specific user has authenticated.

ポリシーの拡張ファイル内で Azure AD を ClaimsProvider 要素に追加することで、Azure AD をクレーム プロバイダーとして定義できます。You can define Azure AD as a claims provider by adding Azure AD to the ClaimsProvider element in the extension file of your policy.

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

  2. ClaimsProviders 要素を見つけます。Find the ClaimsProviders element. 存在しない場合は、それをルート要素の下に追加します。If it does not exist, add it under the root element.

  3. 新しい ClaimsProvider を次のように追加します。Add a new ClaimsProvider as follows:

    <ClaimsProvider>
      <Domain>Contoso</Domain>
      <DisplayName>Login using Contoso</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="ContosoProfile">
          <DisplayName>Contoso Employee</DisplayName>
          <Description>Login with your Contoso account</Description>
          <Protocol Name="OpenIdConnect"/>
          <Metadata>
            <Item Key="METADATA">https://login.windows.net/your-AD-tenant-name.onmicrosoft.com/.well-known/openid-configuration</Item>
            <Item Key="ProviderName">https://sts.windows.net/00000000-0000-0000-0000-000000000000/</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</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">false</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoAppSecret"/>
          </CryptographicKeys>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/>
            <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/>
            <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 プロバイダーと区別するために使用できる一意の値に更新します。Under the ClaimsProvider element, update the value for Domain to a unique value that can be used to distinguish it from other identity providers. たとえば、「 Contoso 」のように指定します。For example Contoso. .com はこのドメイン設定の最後に配置しません。You don't put a .com at the end of this domain setting.

  5. ClaimsProvider 要素の下で、DisplayName の値を、クレーム プロバイダーを表すわかりやすい名前に更新します。Under the ClaimsProvider element, update the value for DisplayName to a friendly name for the claims provider. この値は現在使用されていません。This value is not currently used.

技術プロファイルの更新Update the technical profile

Azure AD エンドポイントからトークンを取得するには、Azure AD B2C で Azure AD との通信に使用するプロトコルを定義する必要があります。To get a token from the Azure AD endpoint, you need to define the protocols that Azure AD B2C should use to communicate with Azure AD. これは、ClaimsProviderTechnicalProfile 要素の中で実行します。This is done inside the TechnicalProfile element of ClaimsProvider.

  1. TechnicalProfile 要素の ID を更新します。Update the ID of the TechnicalProfile element. この ID は、ポリシーの他の部分からこの技術プロファイルを参照するために使用します。This ID is used to refer to this technical profile from other parts of the policy.
  2. DisplayName の値を更新します。Update the value for DisplayName. この値は、サインイン画面のサインイン ボタン上に表示されます。This value will be displayed on the sign-in button on your sign-in screen.
  3. Description の値を更新します。Update the value for Description.
  4. Azure AD では OpenID Connect プロトコルを使用するため、Protocol の値が OpenIdConnect になっていることを確認してください。Azure AD uses the OpenID Connect protocol, so make sure that the value for Protocol is OpenIdConnect.
  5. METADATA の値を https://login.windows.net/your-AD-tenant-name.onmicrosoft.com/.well-known/openid-configuration に設定します。your-AD-tenant-name は Azure AD テナント名です。Set value of the METADATA to https://login.windows.net/your-AD-tenant-name.onmicrosoft.com/.well-known/openid-configuration, where your-AD-tenant-name is your Azure AD tenant name. たとえば、https://login.windows.net/fabrikam.onmicrosoft.com/.well-known/openid-configuration のように指定します。For example, https://login.windows.net/fabrikam.onmicrosoft.com/.well-known/openid-configuration
  6. ブラウザーを開き、更新したばかりの METADATA URL に移動し、issuer オブジェクトを見つけてその値をコピーし、XML ファイル内の ProviderName の値の中に貼り付けます。Open your browser and go to the METADATA URL that you just updated, look for the issuer object, and then copy and paste the value into the value for ProviderName in the XML file.
  7. client_id を、アプリケーションの登録で取得したアプリケーション ID に設定します。Set client_id to the application ID from the application registration.
  8. CryptographicKeys で、StorageReferenceId の値を、前に作成したポリシー キーの名前に更新します。Under CryptographicKeys, update the value of StorageReferenceId to the name of the policy key that you created earlier. たとえば、「 B2C_1A_ContosoAppSecret 」のように入力します。For example, B2C_1A_ContosoAppSecret.

拡張ファイルのアップロードによる確認Upload the extension file for verification

ここまでで、Azure AD B2C が Azure AD ディレクトリと通信する方法を認識するようにポリシーを設定しました。By now, you have configured your policy so that Azure AD B2C knows how to communicate with your Azure AD directory. ポリシーの拡張ファイルをアップロードして、現時点で問題がないことを確認してみます。Try uploading the extension file of your policy just to confirm that it doesn't have any issues so far.

  1. Azure AD B2C テナントの [カスタム ポリシー] ページで、 [ポリシーのアップロード] を選択します。On the Custom Policies page in your Azure AD B2C tenant, select Upload Policy.
  2. [ポリシーが存在する場合は上書きする] を有効にし、TrustFrameworkExtensions.xml ファイルを参照して選択します。Enable Overwrite the policy if it exists, and then browse to and select the TrustFrameworkExtensions.xml file.
  3. [アップロード] をクリックします。Click Upload.

クレーム プロバイダーを登録するRegister the claims provider

この時点では、ID プロバイダーはセットアップされていますが、サインアップ/サインインのページではまだ使用できません。At this point, the identity provider has been set up, but it's not yet available in any of the sign-up/sign-in pages. これを使用できるようにするには、既存のテンプレート ユーザー体験の複製を作成してから、Azure AD の ID プロバイダーも含まれるように変更します。To make it available, create a duplicate of an existing template user journey, and then modify it so that it also has the Azure AD identity provider:

  1. スターター パックから TrustFrameworkBase.xml ファイルを開きます。Open the TrustFrameworkBase.xml file from the starter pack.
  2. Id="SignUpOrSignIn" を含む UserJourney 要素を見つけ、その内容全体をコピーします。Find and copy the entire contents of the UserJourney element that includes Id="SignUpOrSignIn".
  3. TrustFrameworkExtensions.xml を開き、UserJourneys 要素を見つけます。Open the TrustFrameworkExtensions.xml and find the UserJourneys element. 要素が存在しない場合は追加します。If the element doesn't exist, add one.
  4. コピーした UserJourney 要素の内容全体を UserJourneys 要素の子として貼り付けます。Paste the entire content of the UserJourney element that you copied as a child of the UserJourneys element.
  5. ユーザー体験の ID の名前を変更します。Rename the ID of the user journey. たとえば、「 SignUpSignInContoso 」のように入力します。For example, SignUpSignInContoso.

ボタンを表示するDisplay the button

ClaimsProviderSelection 要素は、サインアップまたはサインインのページの ID プロバイダー ボタンに類似しています。The ClaimsProviderSelection element is analogous to an identity provider button on a sign-up/sign-in page. Azure AD 用の ClaimsProviderSelection 要素を追加すると、ユーザーがページにアクセスしたときに新しいボタンが表示されます。If you add a ClaimsProviderSelection element for Azure AD, a new button shows up when a user lands on the page.

  1. TrustFrameworkExtensions.xml で、作成したユーザー体験内に Order="1" を含む OrchestrationStep 要素を見つけます。Find the OrchestrationStep element that includes Order="1" in the user journey that you created in TrustFrameworkExtensions.xml.

  2. ClaimsProviderSelections の下に、次の要素を追加します。Under ClaimsProviderSelections, add the following element. TargetClaimsExchangeId の値を適切な値 (ContosoExchange など) に設定します。Set the value of TargetClaimsExchangeId to an appropriate value, for example ContosoExchange:

    <ClaimsProviderSelection TargetClaimsExchangeId="ContosoExchange" />
    

ボタンが所定の位置に配置されたので、ボタンをアクションにリンクする必要があります。Now that you have a button in place, you need to link it to an action. この場合のアクションでは、Azure AD B2C が Azure AD と通信してトークンを受信します。The action, in this case, is for Azure AD B2C to communicate with Azure AD to receive a token. Azure AD 要求プロバイダーの技術プロファイルをリンクすることで、ボタンをアクションにリンクします。Link the button to an action by linking the technical profile for your Azure AD claims provider:

  1. ユーザー体験内で、Order="2" を含む OrchestrationStep を見つけます。Find the OrchestrationStep that includes Order="2" in the user journey.

  2. 次の ClaimsExchange 要素を追加します。TargetClaimsExchangeId に使用した Id と同じ値を必ずご使用ください。Add the following ClaimsExchange element making sure that you use the same value for Id that you used for TargetClaimsExchangeId:

    <ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="ContosoProfile" />
    

    TechnicalProfileReferenceId の値を、前に作成した技術プロファイルの Id に更新します。Update the value of TechnicalProfileReferenceId to the Id of the technical profile you created earlier. たとえば、「 ContosoProfile 」のように入力します。For example, ContosoProfile.

  3. TrustFrameworkExtensions.xml ファイルを保存し、確認のために再度アップロードします。Save the TrustFrameworkExtensions.xml file and upload it again for verification.

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

Azure AD B2C との通信は、B2C テナントで登録したアプリケーションを介して行われます。Communication with Azure AD B2C occurs through an application that you register in your B2C tenant. このセクションでは、テスト アプリケーションをまだ作成していない場合にそれを作成するための省略可能な手順を紹介します。This section lists optional steps you can complete to create a test application if you haven't already done so.

アプリケーションを Azure AD B2C テナントに登録するには、現在のアプリケーション エクスペリエンス、または新しく統合されたアプリの登録 (プレビュー) エクスペリエンスを使用できます。To register an application in your Azure AD B2C tenant, you can use the current Applications experience, or our new unified App registrations (Preview) experience. この新しいエクスペリエンスの詳細を参照してくださいLearn more about the new experience.

  1. Azure Portal にサインインします。Sign in to the Azure portal.
  2. 上部のメニューにある [ディレクトリ + サブスクリプション] フィルターを選択し、Azure AD B2C テナントを含むディレクトリを選択します。Select the Directory + subscription filter in the top menu, and then select the directory that contains your Azure AD B2C tenant.
  3. 左側のメニューで、 [Azure AD B2C] を選択します。In the left menu, select Azure AD B2C. または、 [すべてのサービス] を選択し、 [Azure AD B2C] を検索して選択します。Or, select All services and search for and select Azure AD B2C.
  4. [アプリケーション] を選択し、 [追加] を選択します。Select Applications, and then select Add.
  5. アプリケーションの名前を入力します。Enter a name for the application. (例: testapp1)。For example, testapp1.
  6. [Web App / Web API] には、 [はい] を選択します。For Web App / Web API, select Yes.
  7. [応答 URL] には「https://jwt.ms」と入力します。For Reply URL, enter https://jwt.ms
  8. 作成 を選択します。Select Create.

証明書利用者ファイルを更新し、テストするUpdate and test the relying party file

作成したユーザー体験を開始する証明書利用者 (RP) ファイルを更新します。Update the relying party (RP) file that initiates the user journey that you created.

  1. 作業ディレクトリに SignUpOrSignIn.xml のコピーを作成し、名前を変更します。Make a copy of SignUpOrSignIn.xml in your working directory, and rename it. たとえば、SignUpSignInContoso.xml に名前を変更します。For example, rename it to SignUpSignInContoso.xml.
  2. 新しいファイルを開き、TrustFrameworkPolicyPolicyId 属性の値を一意の値で更新します。Open the new file and update the value of the PolicyId attribute for TrustFrameworkPolicy with a unique value. たとえば、「 SignUpSignInContoso 」のように入力します。For example, SignUpSignInContoso.
  3. PublicPolicyUri の値をポリシーの URI に更新します。Update the value of PublicPolicyUri with the URI for the policy. たとえば、「 http://contoso.com/B2C_1A_signup_signin_contoso 」のように入力します。For example, http://contoso.com/B2C_1A_signup_signin_contoso.
  4. DefaultUserJourney 内の ReferenceId 属性の値を、先ほど作成したユーザー体験の ID と一致するように更新します。Update the value of the ReferenceId attribute in DefaultUserJourney to match the ID of the user journey that you created earlier. たとえば、SignUpSignInContoso とします。For example, SignUpSignInContoso.
  5. 変更内容を保存し、ファイルをアップロードします。Save your changes and upload the file.
  6. [カスタム ポリシー] で、一覧から新しいポリシーを選択します。Under Custom policies, select the new policy in the list.
  7. [アプリケーションの選択] ボックスの一覧で、前の手順で作成した Azure AD B2C アプリケーションを選択しますIn the Select application drop-down, select the Azure AD B2C application that you created earlier. (例: testapp1)。For example, testapp1.
  8. [今すぐ実行のエンドポイント] をコピーし、プライベート ブラウザー ウィンドウ (Google のシークレット モード、Microsoft Edge の InPrivate ウィンドウなど) で開きます。Copy the Run now endpoint and open it in a private browser window, for example, Incognito Mode in Google Chrome or an InPrivate window in Microsoft Edge. プライベート ブラウザー ウィンドウで開くと、現在キャッシュされている Azure AD の資格情報を使用せずに、ユーザー体験を全体的にテストできます。Opening in a private browser window allows you to test the full user journey by not using any currently cached Azure AD credentials.
  9. Azure AD のサインイン ボタン (たとえば、Contoso Employee) を選択し、Azure AD 組織テナントのユーザーの資格情報を入力します。Select the Azure AD sign in button, for example, Contoso Employee, and then enter the credentials for a user in your Azure AD organizational tenant. アプリケーションを承認するように求められたら、プロファイルの情報を入力します。You're asked to authorize the application, and then enter information for your profile.

サインイン プロセスが成功すると、ブラウザーは https://jwt.ms にリダイレクトされ、Azure AD B2C によって返されたトークンの内容が表示されます。If the sign in process is successful, your browser is redirected to https://jwt.ms, which displays the contents of the token returned by Azure AD B2C.

次の手順Next steps

カスタム ポリシーを操作する場合、開発過程でポリシーのトラブルシューティングを行っているときに、追加情報が必要になることがあります。When working with custom policies, you might sometimes need additional information when troubleshooting a policy during its development.

問題の診断に役立てるために、ポリシーを一時的に "開発者モード" にして、Azure Application Insights を使用してログを収集できます。To help diagnose issues, you can temporarily put the policy into "developer mode" and collect logs with Azure Application Insights. その方法については、Azure Active Directory B2C: ログの収集に関するページを参照してください。Find out how in Azure Active Directory B2C: Collecting Logs.