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
相关产品推荐
相关产品推荐

