重要
2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください。
開始する前にこのページの上部にある ポリシーの種類 セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。
この機能は、カスタム ポリシーでのみ使用できます。 セットアップ手順については、前のセレクターで [カスタム ポリシー] を選択します。
Azure Active Directory B2C (Azure AD B2C) では、Azure AD B2C に提供される接続文字列を使用して 、Application Insights にイベント データを直接送信できます。 Application Insights 技術プロファイルを使用すると、詳細でカスタマイズされたユーザー体験のイベント ログを取得することができます。
- ユーザーの行動に関する分析情報を得る。
- 開発または運用環境での独自のポリシーのトラブルシューティングを行います。
- パフォーマンスを測定します。
- Application Insights から通知を作成します。
注
この機能はパブリック プレビュー段階にあります。
概要
カスタム イベント ログを有効にするには、Application Insights 技術プロファイルを追加します。 技術プロファイルでは、Application Insights 接続文字列、イベント名、および記録する要求を定義します。 イベントを投稿するには、技術プロファイルをオーケストレーション ステップとして ユーザー体験に追加します。
Application Insights を使用する場合は、次の点を考慮してください。
- Application Insights で新しいログを使用できるようになるまで、短い遅延 (通常は 5 分未満) があります。
- Azure AD B2C では、記録する要求を選択できます。 個人データにクレームを含めないでください。
- ユーザー セッションを記録するには、関連付け ID を使用してイベントを統合できます。
- Application Insights 技術プロファイルを ユーザー体験 または サブ体験から直接呼び出します。 Application Insights 技術プロファイルを 検証技術プロファイルとして使用しないでください。
[前提条件]
- 「Active Directory B2C でのカスタム ポリシーの概要」の手順を完了してください。 このチュートリアルでは、Azure AD B2C テナント構成を使用するようにカスタム ポリシー ファイルを更新する方法について説明します。
- Web アプリを登録していない場合は、Web アプリケーションを登録する手順を使用して Web アプリを登録します。
Application Insights リソースの作成
Azure AD B2C で Application Insights を使用する場合は、リソースを作成して接続文字列を取得するだけです。 詳細については、「 Application Insights リソースの作成」を参照してください。
- Azure portal にサインインします。
- 複数のテナントにアクセスできる場合は、上部メニューの [設定] アイコンを選択して、[ ディレクトリ + サブスクリプション ] メニューから Microsoft Entra ID テナントに切り替えます。
- Azure portal の左上隅にある [ リソースの作成 ] を選択し、 Application Insights を検索して選択します。
- を選択してを作成します。
- [名前] に、リソースの名前を入力します。
- [ アプリケーションの種類] で、[ Web アプリケーション ASP.NET 選択します。
- リソース グループの場合は、既存のグループを選択するか、新しいグループの名前を入力します。
- を選択してを作成します。
- 新しい Application Insights リソースを開き、[ Essentials] を展開して、接続文字列をコピーします。
要求を定義する
要求は、Azure AD B2C ポリシーの実行中にデータの一時的なストレージを提供します。 ClaimsSchema 要素で要求を宣言します。
ポリシーの拡張ファイルを開きます。 ファイルは
SocialAndLocalAccounts/
TrustFrameworkExtensions.xml
のようになります。BuildingBlocks 要素を検索します。 要素が表示されない場合は、追加します。
ClaimsSchema 要素を検索します。 要素が表示されない場合は、追加します。
ClaimsSchema 要素に次の要求を追加します。
<ClaimType Id="EventType"> <DisplayName>Event type</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="EventTimestamp"> <DisplayName>Event timestamp</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="PolicyId"> <DisplayName>Policy Id</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="Culture"> <DisplayName>Culture ID</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="CorrelationId"> <DisplayName>Correlation Id</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="federatedUser"> <DisplayName>Federated user</DisplayName> <DataType>boolean</DataType> </ClaimType> <ClaimType Id="parsedDomain"> <DisplayName>Domain name</DisplayName> <DataType>string</DataType> <UserHelpText>The ___domain portion of the email address.</UserHelpText> </ClaimType> <ClaimType Id="userInLocalDirectory"> <DisplayName>userInLocalDirectory</DisplayName> <DataType>boolean</DataType> </ClaimType>
新しい技術プロファイルを追加する
技術プロファイルは、カスタム ポリシーの関数と見なすことができます。 これらの関数は 、技術プロファイル包含 アプローチを使用します。このアプローチでは、技術プロファイルに別の技術プロファイルが含まれ、設定が変更されたり、新しい機能が追加されたりします。 次の表は、セッションを開いてイベントを投稿するために使用される技術プロファイルを定義しています。
技術プロファイル | 課題 |
---|---|
AppInsights-Common | 一般的な構成を持つ一般的な技術プロファイル。 これには、Application Insights 接続文字列、記録する要求のコレクション、および開発者モードが含まれます。 その他の技術プロファイルには、共通の技術プロファイルが含まれており、イベント名などの要求をさらに追加します。 |
AppInsights-SignInRequest | サインイン要求が受信されたときに、一連の要求を含む SignInRequest イベントを記録します。 |
AppInsights-UserSignUp | ユーザーがサインアップまたはサインイン体験でサインアップ オプションをトリガーしたときに UserSignUp イベントを記録します。 |
AppInsights-SignInComplete | 証明書利用者アプリケーションにトークンが送信されたときに、認証が成功したときに SignInComplete イベントを記録します。 |
スターター パックから TrustFrameworkExtensions.xml ファイルを開きます。 ClaimsProvider 要素に技術プロファイルを追加します。
<ClaimsProvider>
<DisplayName>Application Insights</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="AppInsights-Common">
<DisplayName>Application Insights</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.Insights.AzureApplicationInsightsProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<!-- The ApplicationInsights connection string, which you use for logging the events -->
<Item Key="ConnectionString">xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</Item>
<Item Key="DeveloperMode">false</Item>
<Item Key="DisableTelemetry ">false</Item>
</Metadata>
<InputClaims>
<!-- Properties of an event are added through the syntax {property:NAME}, where NAME is the property being added to the event. DefaultValue can be either a static value or a value that's resolved by one of the supported DefaultClaimResolvers. -->
<InputClaim ClaimTypeReferenceId="EventTimestamp" PartnerClaimType="{property:EventTimestamp}" DefaultValue="{Context:DateTimeInUtc}" />
<InputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="{property:TenantId}" DefaultValue="{Policy:TrustFrameworkTenantId}" />
<InputClaim ClaimTypeReferenceId="PolicyId" PartnerClaimType="{property:Policy}" DefaultValue="{Policy:PolicyId}" />
<InputClaim ClaimTypeReferenceId="CorrelationId" PartnerClaimType="{property:CorrelationId}" DefaultValue="{Context:CorrelationId}" />
<InputClaim ClaimTypeReferenceId="Culture" PartnerClaimType="{property:Culture}" DefaultValue="{Culture:RFC5646}" />
</InputClaims>
</TechnicalProfile>
<TechnicalProfile Id="AppInsights-SignInRequest">
<InputClaims>
<!-- An input claim with a PartnerClaimType="eventName" is required. This is used by the AzureApplicationInsightsProvider to create an event with the specified value. -->
<InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="SignInRequest" />
</InputClaims>
<IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>
<TechnicalProfile Id="AppInsights-UserSignUp">
<InputClaims>
<InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="UserSignUp" />
</InputClaims>
<IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>
<TechnicalProfile Id="AppInsights-SignInComplete">
<InputClaims>
<InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="SignInComplete" />
<InputClaim ClaimTypeReferenceId="federatedUser" PartnerClaimType="{property:FederatedUser}" DefaultValue="false" />
<InputClaim ClaimTypeReferenceId="parsedDomain" PartnerClaimType="{property:FederationPartner}" DefaultValue="Not Applicable" />
<InputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="{property:IDP}" DefaultValue="Local" />
</InputClaims>
<IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
重要
AppInsights-Common
技術プロファイルの接続文字列を、Application Insights リソースが提供する GUID に変更します。
技術プロファイルをオーケストレーション手順として追加する
技術プロファイルを参照する新しいオーケストレーション手順を追加します。
重要
新しいオーケストレーション 手順を追加した後、1 から N までの整数をスキップせずに、ステップの番号を順番に変更します。
SocialAndLocalAccounts/SignUpOrSignin.xml
など、ユーザー体験を含むポリシー ファイルを特定して開きます。2 番目のオーケストレーション 手順として
AppInsights-SignInRequest
を呼び出します。 この手順では、サインアップまたはサインイン要求が受信されたことを追跡します。<!-- Track that we have received a sign in request --> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="TrackSignInRequest" TechnicalProfileReferenceId="AppInsights-SignInRequest" /> </ClaimsExchanges> </OrchestrationStep>
SendClaims
オーケストレーションステップの前に、AppInsights-UserSignup
を呼び出す新しいステップを追加します。 ユーザーがサインアップまたはサインインの過程でサインアップ ボタンを選択するとトリガーされます。 最初から最後のオーケストレーション手順に整数をスキップしないように、オーケストレーション手順を更新する必要がある場合があります (Order="8"
)。<!-- Handles the user selecting the sign-up link in the local account sign-in page The `SendClaims` orchestration step comes after this one, --> <OrchestrationStep Order="8" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimsExist" ExecuteActionsIf="false"> <Value>newUser</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> <Precondition Type="ClaimEquals" ExecuteActionsIf="true"> <Value>newUser</Value> <Value>false</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="TrackUserSignUp" TechnicalProfileReferenceId="AppInsights-UserSignup" /> </ClaimsExchanges> </OrchestrationStep>
SendClaims
オーケストレーション手順の後、AppInsights-SignInComplete
を呼び出します。 このステップは、正常に完了した体験を示します。 オーケストレーション手順を更新する必要がある場合があります(Order="10"
、最初から最後のオーケストレーション手順に整数をスキップしないようにします。<!-- Track that we have successfully sent a token The `SendClaims` orchestration step come before this one, --> <OrchestrationStep Order="10" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="TrackSignInComplete" TechnicalProfileReferenceId="AppInsights-SignInComplete" /> </ClaimsExchanges> </OrchestrationStep>
ファイルのアップロード、ポリシーの実行、イベントの表示
TrustFrameworkExtensions.xml ファイルを保存してアップロードします。 次に、アプリケーションから証明書利用者ポリシーを呼び出すか、Azure portal で [今すぐ実行 ] を使用します。 Application Insights でイベントが使用可能になるまで待ちます。
- Microsoft Entra テナントで Application Insights リソースを開きます。
- [ 使用状況] を選択し、[ イベント] を選択します。
- [期間] を [過去 1 時間] に、[単位] を [3 分] に設定します。 結果を表示するには、ウィンドウの更新が必要になる場合があります。
その他のデータを収集する
ビジネス ニーズに合わせて、より多くのクレームを記録したい場合があります。 要求を追加するには、最初 に要求を定義してから、入力要求コレクションに要求を追加します。 AppInsights-Common 技術プロファイルに追加した要求は、すべてのイベントに表示されます。 特定の技術プロファイルに追加した要求は、そのイベントにのみ表示されます。 入力要求要素には、次の属性が含まれています。
- ClaimTypeReferenceId は、要求の種類への参照です。
-
PartnerClaimType は、Azure Insights に表示されるプロパティの名前です。
{property:NAME}
の構文を使用します。ここで、NAME
はイベントに追加されるプロパティです。 -
DefaultValue は、イベント名など、記録される定義済みの値です。 ユーザー体験で使用される要求が空の場合、既定値が使用されます。 たとえば、
identityProvider
要求は、Facebook などのフェデレーション技術プロファイルによって設定されます。 要求が空の場合は、ユーザーがローカル アカウントでサインインしたことを示します。 したがって、既定値は Local に設定されます。 アプリケーション ID やユーザー IP アドレスなどのコンテキスト値を持つ 要求リゾルバー を記録することもできます。
要求を操作する
入力要求変換を使用して、入力要求を変更したり、Application Insights に送信する前に新しい要求を生成したりできます。 次の例では、技術プロファイルに CheckIsAdmin
入力要求変換が含まれています。
<TechnicalProfile Id="AppInsights-SignInComplete">
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="CheckIsAdmin" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="isAdmin" PartnerClaimType="{property:IsAdmin}" />
...
</InputClaims>
<IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>
イベントを追加する
イベントを追加するには、 AppInsights-Common
技術プロファイルを含む新しい技術プロファイルを作成します。 次に、オーケストレーション ステップとして新しい技術プロファイルを ユーザー体験に追加します。 準備ができたら、 Precondition 要素を使用してイベントをトリガーします。 たとえば、ユーザーが多要素認証を実行する場合にのみ、イベントを報告します。
<TechnicalProfile Id="AppInsights-MFA-Completed">
<InputClaims>
<InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="MFA-Completed" />
</InputClaims>
<IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>
重要
ユーザー体験にイベントを追加するときは、オーケストレーション手順の番号を順番に変更することを忘れないでください。
<OrchestrationStep Order="8" Type="ClaimsExchange">
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>isActiveMFASession</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="TrackUserMfaCompleted" TechnicalProfileReferenceId="AppInsights-MFA-Completed" />
</ClaimsExchanges>
</OrchestrationStep>
開発者モードを有効にする
Application Insights を使用してイベントを定義する場合は、開発者モードが有効かどうかを指定できます。 開発者モードでは、イベントのバッファー処理方法を制御します。 イベントボリュームが最小限の開発環境では、開発者モードを有効にすると、イベントがすぐに Application Insights に送信されます。 既定値は false
です。 運用環境では開発者モードを有効にしないでください。
開発者モードを有効にするには、DeveloperMode
技術プロファイルのtrue
にAppInsights-Common
メタデータを変更します。
<TechnicalProfile Id="AppInsights-Common">
<Metadata>
...
<Item Key="DeveloperMode">true</Item>
</Metadata>
</TechnicalProfile>
遠隔測定を無効にする
Application Insights ログを無効にするには、DisableTelemetry
のメタデータを true
技術プロファイルのAppInsights-Common
に変更します。
<TechnicalProfile Id="AppInsights-Common">
<Metadata>
...
<Item Key="DisableTelemetry">true</Item>
</Metadata>
</TechnicalProfile>
次のステップ
Azure Application Insights を使用してカスタム KPI ダッシュボードを作成する方法について説明します。