You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure B2C自定义策略如何将登录起止时间合并到同一条Application Insights日志

配置修改步骤

1. 新增声明定义

首先在信任框架扩展策略的<BuildingBlocks> -> <ClaimsSchema>节点下,添加2个新声明,用于存储登录开始时间和总耗时:

<ClaimType Id="SignInStartTime">
  <DisplayName>登录启动时间</DisplayName>
  <DataType>dateTime</DataType>
</ClaimType>
<ClaimType Id="SignInTotalDurationMs">
  <DisplayName>登录总耗时(毫秒)</DisplayName>
  <DataType>long</DataType>
</ClaimType>

2. 修改登录启动事件技术配置

调整AppInsights-SignInRequest技术配置,把登录启动时间持久化到会话上下文,供后续流程调用:

<TechnicalProfile Id="AppInsights-SignInRequest">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="EventType" PartnerClaimType="eventName" DefaultValue="SignInRequest" />
    <!-- 新增:将当前UTC时间赋值给SignInStartTime声明 -->
    <InputClaim ClaimTypeReferenceId="SignInStartTime" DefaultValue="{Context:DateTimeInUtc}" />
  </InputClaims>
  <!-- 新增:将SignInStartTime作为输出声明持久化到会话 -->
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="SignInStartTime" />
  </OutputClaims>
  <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>

3. 新增耗时计算逻辑

在<BuildingBlocks> -> <ClaimsTransformations>节点下添加时间差计算的声明转换:

<ClaimsTransformation Id="CalculateSignInDuration" TransformationMethod="DateTimeDiff">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="SignInStartTime" TransformationClaimType="startTime" />
    <InputClaim ClaimTypeReferenceId="EventTimestamp" TransformationClaimType="endTime" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="timeUnit" DataType="string" Value="millisecond" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="SignInTotalDurationMs" TransformationClaimType="result" />
  </OutputClaims>
</ClaimsTransformation>

再新增一个调用该声明转换的技术配置:

<TechnicalProfile Id="ClaimsTransformation-CalculateSignInDuration">
  <DisplayName>计算登录总耗时</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.ClaimsTransformations.CombinedClaimsTransformationProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="CalculateSignInDuration" />
  </OutputClaimsTransformations>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="SignInTotalDurationMs" />
  </OutputClaims>
</TechnicalProfile>

4. 修改登录完成事件技术配置

调整AppInsights-SignInComplete配置,把启动时间和总耗时加入上报字段:

<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" />
    <!-- 新增:上报登录启动时间 -->
    <InputClaim ClaimTypeReferenceId="SignInStartTime" PartnerClaimType="{property:SignInStartTime}" />
    <!-- 新增:上报登录全流程耗时 -->
    <InputClaim ClaimTypeReferenceId="SignInTotalDurationMs" PartnerClaimType="{property:SignInTotalDurationMs}" />
  </InputClaims>
  <IncludeTechnicalProfile ReferenceId="AppInsights-Common" />
</TechnicalProfile>

5. 调整用户旅程步骤

在上报登录完成事件前新增耗时计算步骤,原有步骤的Order顺延:

<!-- 新增耗时计算步骤,Order设为10 -->
<OrchestrationStep Order="10" Type="ClaimsExchange">
  <Preconditions>
    <!-- 无启动时间时跳过该步骤,避免异常场景报错 -->
    <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
      <Value>SignInStartTime</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="CalculateSignInDurationExchange" TechnicalProfileReferenceId="ClaimsTransformation-CalculateSignInDuration" />
  </ClaimsExchanges>
</OrchestrationStep>
<!-- 原有上报登录完成的步骤,Order从10改为11 -->
<OrchestrationStep Order="11" Type="ClaimsExchange">
  <ClaimsExchanges>
    <ClaimsExchange Id="TrackSignInComplete" TechnicalProfileReferenceId="AppInsights-SignInComplete" />
  </ClaimsExchanges>
</OrchestrationStep>

修改完成后,你在Application Insights中查询到的SignInComplete事件自定义属性里,会同时包含登录启动时间、登录完成时间、全流程耗时三个字段,单条日志即可查看完整的时间链路数据。如果你不需要单独保留SignInRequest事件,也可以直接删除上报启动事件的步骤,进一步减少日志量。

内容的提问来源于stack exchange,提问作者Shiva Prasad Pola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:54:07