重要
2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください。
アプリケーションでは、ユーザーがプロファイルのサインアップ、サインイン、または管理を行うことができるユーザー フローを使用できます。 ユーザー フローがビジネス固有のニーズをすべて満たしていない場合は、 カスタム ポリシーを使用できます。
事前に作成されたカスタム ポリシー スターター パック を使用してカスタム ポリシーを記述することはできますが、カスタム ポリシーの構築方法を理解しておくことが重要です。 この記事では、最初のカスタム ポリシーを最初から作成する方法について説明します。
[前提条件]
まだお持ちでない場合は、Azure サブスクリプションにリンクされている Azure AD B2C テナントを作成 します。
コンピューターに Visual Studio Code (VS Code) がインストールされている必要があります。
注
この記事は、 Azure Active Directory B2C での独自のカスタム ポリシーの作成と実行に関するハウツー ガイド シリーズの一部です。 最初の記事からこのシリーズを開始することをお勧めします。
手順 1 - 署名キーと暗号化キーを構成する
まだ作成していない場合は、次の暗号化キーを作成します。 以下のチュートリアルを自動化するには、 IEF セットアップ アプリ にアクセスし、指示に従います。
Identity Experience Framework アプリケーションの署名キーと暗号化キーを追加して署名キーを作成する手順を使用します。
Identity Experience Framework アプリケーションの署名キーと暗号化キーを追加して暗号化キーを作成する手順を使用します。
手順 2 - カスタム ポリシー ファイルをビルドする
VS Code で、
ContosoCustomPolicy.XML
ファイルを作成して開きます。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 要素が含まれています。要求を宣言するには、
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>
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
に正しい値を使用していることを確認します。UserJourneys
ファイルのContosoCustomPolicy.XML
セクションで、次のコードを追加します。<UserJourney Id="HelloWorldJourney"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney>
UserJourney が追加されました。 ユーザー体験では、Azure AD B2C が要求を処理する過程でエンド ユーザーが通過するビジネス ロジックを指定します。 このユーザー体験には、次の手順で定義する要求で JTW トークンを発行する手順が 1 つしかありません。
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 - カスタム ポリシー ファイルをアップロードする
- Azure portal にサインインします。
- 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコンを選択し、[ディレクトリとサブスクリプション] メニューからお使いの Azure AD B2C テナントに切り替えます。
- Azure portal で、 [Azure AD B2C] を検索して選択します。
- 左側のメニューの [ ポリシー] で、[ Identity Experience Framework] を選択します。
- [ カスタム ポリシーのアップロード] を選択し、参照して選択し、
ContosoCustomPolicy.XML
ファイルをアップロードします。
ファイルをアップロードすると、Azure AD B2C によってプレフィックス B2C_1A_
が追加されるため、名前は B2C_1A_CONTOSOCUSTOMPOLICY のようになります。
手順 4 - カスタム ポリシーをテストする
- [ カスタム ポリシー] で、[ B2C_1A_CONTOSOCUSTOMPOLICY] を選択します。
- カスタム ポリシーの概要ページの [ アプリケーションの選択 ] で、以前に登録した Webapp1 などの Web アプリケーションを選択します。 [ 応答 URL の選択 ] の値が [
https://jwt.ms
] に設定されていることを確認します。 - [ 今すぐ実行 ] ボタンを選択します。
ポリシーの実行が完了すると、 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
ルート要素の子要素として追加されます。
- ビルディングブロック
- クレームプロバイダー
- ユーザージャーニー
- レライイングパーティー
次に、次の情報を確認します。
カスタム ポリシー 要求の概要について。
カスタム ポリシー 要求データ型について。
カスタム ポリシー のユーザー入力の種類について。