次の方法で共有


初めての Azure Active Directory B2C カスタム ポリシーを作成する - Hello World!

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

アプリケーションでは、ユーザーがプロファイルのサインアップ、サインイン、または管理を行うことができるユーザー フローを使用できます。 ユーザー フローがビジネス固有のニーズをすべて満たしていない場合は、 カスタム ポリシーを使用できます。

事前に作成されたカスタム ポリシー スターター パック を使用してカスタム ポリシーを記述することはできますが、カスタム ポリシーの構築方法を理解しておくことが重要です。 この記事では、最初のカスタム ポリシーを最初から作成する方法について説明します。

[前提条件]

この記事は、 Azure Active Directory B2C での独自のカスタム ポリシーの作成と実行に関するハウツー ガイド シリーズの一部です。 最初の記事からこのシリーズを開始することをお勧めします。

手順 1 - 署名キーと暗号化キーを構成する

まだ作成していない場合は、次の暗号化キーを作成します。 以下のチュートリアルを自動化するには、 IEF セットアップ アプリ にアクセスし、指示に従います。

  1. Identity Experience Framework アプリケーションの署名キーと暗号化キーを追加して署名キーを作成する手順を使用します。

  2. Identity Experience Framework アプリケーションの署名キーと暗号化キーを追加して暗号化キーを作成する手順を使用します。

手順 2 - カスタム ポリシー ファイルをビルドする

  1. VS Code で、 ContosoCustomPolicy.XMLファイルを作成して開きます。

  2. ContosoCustomPolicy.XML ファイルに、次のコードを追加します。

        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <TrustFrameworkPolicy
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06"
          PolicySchemaVersion="0.3.0.0"
          TenantId="yourtenant.onmicrosoft.com"
          PolicyId="B2C_1A_ContosoCustomPolicy"
          PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
    
            <BuildingBlocks>
                <!-- Building Blocks Here-->
            </BuildingBlocks>
    
            <ClaimsProviders>
                <!-- Claims Providers Here-->
            </ClaimsProviders>
    
            <UserJourneys>
                <!-- User Journeys Here-->
            </UserJourneys>
    
            <RelyingParty>
                <!-- 
                    Relying Party Here that's your policy’s entry point
                    Specify the User Journey to execute 
                    Specify the claims to include in the token that is returned when the policy runs
                -->
            </RelyingParty>
        </TrustFrameworkPolicy>
    
    

    yourtenantをテナント名のサブドメイン部分 (contosoなど) に置き換えます。 テナント名を取得する方法について説明します。

    XML 要素は、ポリシー ID とテナント名を持つポリシー ファイルの最上位 TrustFrameworkPolicy 要素を定義します。 TrustFrameworkPolicy 要素には、このシリーズで使用する他の XML 要素が含まれています。

  3. 要求を宣言するには、BuildingBlocks ファイルのセクションContosoCustomPolicy.XML次のコードを追加します。

      <ClaimsSchema>
        <ClaimType Id="objectId">
            <DisplayName>unique object Id for subject of the claims being returned</DisplayName>
            <DataType>string</DataType>
        </ClaimType>        
        <ClaimType Id="message">
            <DisplayName>Will hold Hello World message</DisplayName>
            <DataType>string</DataType>
        </ClaimType>
      </ClaimsSchema>
    

    要求は変数に似ています。 要求の宣言には、要求の データ型も表示されます。

  4. ClaimsProviders ファイルの ContosoCustomPolicy.XML セクションで、次のコードを追加します。

        <ClaimsProvider>
          <DisplayName>Token Issuer</DisplayName>
          <TechnicalProfiles>
            <TechnicalProfile Id="JwtIssuer">
              <DisplayName>JWT Issuer</DisplayName>
              <Protocol Name="None" />
              <OutputTokenFormat>JWT</OutputTokenFormat>
              <Metadata>
                <Item Key="client_id">{service:te}</Item>
                <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
                <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
              </Metadata>
              <CryptographicKeys>
                <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
                <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer" />
              </CryptographicKeys>
            </TechnicalProfile>
          </TechnicalProfiles>
        </ClaimsProvider>
    
        <ClaimsProvider>
          <!-- The technical profile(s) defined in this section is required by the framework to be included in all custom policies. -->
          <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
          <TechnicalProfiles>
            <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
              <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
              <Protocol Name="None" />
              <Metadata>
                <Item Key="url">{service:te}</Item>
              </Metadata>
            </TechnicalProfile>
          </TechnicalProfiles>
        </ClaimsProvider>
    

    JWT 発行者を宣言しました。 CryptographicKeysセクションで、手順 1 で署名キーと暗号化キーを構成するために別の名前を使用した場合は、StorageReferenceIdに正しい値を使用していることを確認します。

  5. UserJourneys ファイルの ContosoCustomPolicy.XML セクションで、次のコードを追加します。

      <UserJourney Id="HelloWorldJourney">
        <OrchestrationSteps>
          <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
        </OrchestrationSteps>
      </UserJourney>
    

    UserJourney が追加されました。 ユーザー体験では、Azure AD B2C が要求を処理する過程でエンド ユーザーが通過するビジネス ロジックを指定します。 このユーザー体験には、次の手順で定義する要求で JTW トークンを発行する手順が 1 つしかありません。

  6. RelyingParty ファイルの ContosoCustomPolicy.XML セクションで、次のコードを追加します。

      <DefaultUserJourney ReferenceId="HelloWorldJourney"/>
      <TechnicalProfile Id="HelloWorldPolicyProfile">
        <DisplayName>Hello World Policy Profile</DisplayName>
        <Protocol Name="OpenIdConnect" />
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
          <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
        </OutputClaims>
        <SubjectNamingInfo ClaimType="sub" />
      </TechnicalProfile>
    

    RelyingParty セクションは、ポリシーへのエントリ ポイントです。 実行する UserJourney と、ポリシーの実行時に返されるトークンに含める要求を指定します。

手順 2. を完了すると、ContosoCustomPolicy.XML ファイルは次のコードのようになります。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="Contosob2c2233.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://Contosob2c2233.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
        <BuildingBlocks>
            <ClaimsSchema>
            <ClaimType Id="objectId">
                <DisplayName>unique object Id for subject of the claims being returned</DisplayName>
                <DataType>string</DataType>
            </ClaimType>        
            <ClaimType Id="message">
                <DisplayName>Will hold Hello World message</DisplayName>
                <DataType>string</DataType>
            </ClaimType>
            </ClaimsSchema>
        </BuildingBlocks>
        <ClaimsProviders><!--Claims Providers Here-->
            <ClaimsProvider>
                <DisplayName>Token Issuer</DisplayName>
                <TechnicalProfiles>
                    <TechnicalProfile Id="JwtIssuer">
                        <DisplayName>JWT Issuer</DisplayName>
                        <Protocol Name="None"/>
                        <OutputTokenFormat>JWT</OutputTokenFormat>
                        <Metadata>
                            <Item Key="client_id">{service:te}</Item>
                            <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
                            <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
                        </Metadata>
                        <CryptographicKeys>
                            <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer"/>
                            <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer"/>
                        </CryptographicKeys>
                    </TechnicalProfile>
                </TechnicalProfiles>
            </ClaimsProvider>
    
            <ClaimsProvider>
            <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
                <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
                <Protocol Name="None" />
                <Metadata>
                    <Item Key="url">{service:te}</Item>
                </Metadata>
                </TechnicalProfile>
            </TechnicalProfiles>
            </ClaimsProvider>
        </ClaimsProviders>
      <UserJourneys>
        <UserJourney Id="HelloWorldJourney">
          <OrchestrationSteps>
            <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
          </OrchestrationSteps>
        </UserJourney>
      </UserJourneys>
        <RelyingParty><!-- 
                Relying Party Here that's your policy’s entry point
                Specify the User Journey to execute 
                Specify the claims to include in the token that is returned when the policy runs
            -->
            <DefaultUserJourney ReferenceId="HelloWorldJourney"/>
            <TechnicalProfile Id="HelloWorldPolicyProfile">
                <DisplayName>Hello World Policy Profile</DisplayName>
                <Protocol Name="OpenIdConnect"/>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
                    <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
                </OutputClaims>
                <SubjectNamingInfo ClaimType="sub"/>
            </TechnicalProfile>
        </RelyingParty>
    </TrustFrameworkPolicy>

手順 3 - カスタム ポリシー ファイルをアップロードする

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
  3. Azure portal で、 [Azure AD B2C] を検索して選択します。
  4. 左側のメニューの [ ポリシー] で、[ Identity Experience Framework] を選択します。
  5. [ カスタム ポリシーのアップロード] を選択し、参照して選択し、 ContosoCustomPolicy.XML ファイルをアップロードします。

ファイルをアップロードすると、Azure AD B2C によってプレフィックス B2C_1A_が追加されるため、名前は B2C_1A_CONTOSOCUSTOMPOLICY のようになります。

手順 4 - カスタム ポリシーをテストする

  1. [ カスタム ポリシー] で、[ B2C_1A_CONTOSOCUSTOMPOLICY] を選択します。
  2. カスタム ポリシーの概要ページの [ アプリケーションの選択 ] で、以前に登録した Webapp1 などの Web アプリケーションを選択します。 [ 応答 URL の選択 ] の値が [https://jwt.ms] に設定されていることを確認します。
  3. [ 今すぐ実行 ] ボタンを選択します。

ポリシーの実行が完了すると、 https://jwt.msにリダイレクトされ、デコードされた JWT が表示されます。 次の JWT スニペットのようになります。

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "abcd-1234-efgh-5678-ijkl-etc.",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "message": "Hello World!"
    }.[Signature]

message要求とsub要求に注目してください。この要求は、 セクションでRelyingPartyとして設定します。

この記事では、Azure AD B2C カスタム ポリシーに含まれる 4 つのセクションについて学習し、使用しました。 これらのセクションは、 TrustFrameworkPolicy ルート要素の子要素として追加されます。

  • ビルディングブロック
  • クレームプロバイダー
  • ユーザージャーニー
  • レライイングパーティー

次に、次の情報を確認します。