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

Azure B2C自定义策略:带限时豁免的安全重认证流程实现指引

Azure B2C自定义策略实现带限时豁免的重认证流程

核心思路

不用跳转独立登录页,直接在现有用户旅程中嵌入重认证逻辑:通过会话管理记录用户上次完成强认证的时间,当用户触发高安全操作时,先判断会话中记录的时间是否在30分钟内,若超出则强制触发生物识别等强认证,否则直接豁免。

具体实现步骤

  • 添加会话相关声明定义
    在自定义策略的<ClaimsSchema>中添加用于记录重认证时间的声明:
    <ClaimType Id="lastStrongAuthTime">
      <DisplayName>Last Strong Authentication Timestamp</DisplayName>
      <DataType>string</DataType>
      <UserHelpText>Timestamp when user last completed step-up authentication</UserHelpText>
    </ClaimType>
    
  • 配置会话管理技术配置文件
    创建一个会话管理技术配置文件,用于持久化重认证时间到会话中,同时设置会话有效期为30分钟:
    <TechnicalProfile Id="SM-StepUpAuth">
      <DisplayName>Session Management for Step-Up Authentication</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="SessionExpiryInSeconds">1800</Item> <!-- 30分钟,1800秒 -->
        <Item Key="SessionType">Persistent</Item>
      </Metadata>
      <PersistedClaims>
        <PersistedClaim ClaimTypeReferenceId="lastStrongAuthTime" />
      </PersistedClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="lastStrongAuthTime" />
      </OutputClaims>
    </TechnicalProfile>
    
  • 创建强认证技术配置文件
    以生物识别(比如FIDO2)为例,定义强认证的技术配置文件:
    <TechnicalProfile Id="StrongAuth-FIDO2">
      <DisplayName>FIDO2 Strong Authentication</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <Metadata>
        <Item Key="ProviderName">https://login.microsoftonline.com/{tenant}/v2.0</Item>
        <Item Key="METADATA">https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration</Item>
        <Item Key="response_types">code</Item>
        <Item Key="scope">openid profile</Item>
        <Item Key="UsePolicyInRedirectUri">false</Item>
        <Item Key="client_id">{your-b2c-app-client-id}</Item>
        <Item Key="IdTokenAudience">{your-b2c-app-client-id}</Item>
        <!-- 强制使用FIDO2认证 -->
        <Item Key="domain_hint">fido2</Item>
      </Metadata>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="loginName" PartnerClaimType="login_hint" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId" />
        <OutputClaim ClaimTypeReferenceId="lastStrongAuthTime" DefaultValue="{CurrentDateTime}" /> <!-- 记录当前时间作为重认证时间 -->
      </OutputClaims>
      <ValidationTechnicalProfiles>
        <ValidationTechnicalProfile ReferenceId="SM-StepUpAuth" /> <!-- 持久化到会话 -->
      </ValidationTechnicalProfiles>
    </TechnicalProfile>
    
  • 添加重认证条件判断逻辑
    在用户旅程的高安全操作步骤前,添加一个Orchestration Step,用于判断是否需要触发重认证:
    <OrchestrationStep Order="X" Type="ClaimsExchange">
      <Preconditions>
        <!-- 如果lastStrongAuthTime存在,且当前时间与该时间差小于30分钟,则跳过重认证 -->
        <Precondition Type="ClaimExists" ExecuteActionsIf="true">
          <Value>lastStrongAuthTime</Value>
          <Action>SkipThisOrchestrationStep</Action>
          <Precondition Type="TimeCompare" ExecuteActionsIf="true">
            <Value>lastStrongAuthTime</Value>
            <Value>CurrentDateTime</Value>
            <Value>00:30:00</Value>
            <Value>minute</Value>
            <Action>SkipThisOrchestrationStep</Action>
          </Precondition>
        </Precondition>
      </Preconditions>
      <ClaimsExchanges>
        <ClaimsExchange Id="StrongAuthExchange" TechnicalProfileReferenceId="StrongAuth-FIDO2" />
      </ClaimsExchanges>
    </OrchestrationStep>
    
  • 整合到高安全操作的用户旅程
    将上述步骤添加到更新个人信息、银行卡信息等操作对应的用户旅程中,确保在执行敏感操作前先完成重认证判断。

关键说明

  • 会话有效期通过SessionExpiryInSeconds设置为1800秒(30分钟),到期后会话中的lastStrongAuthTime会被清除,用户需重新完成强认证。
  • TimeCompare断言用于判断上次重认证时间与当前时间的差值,若小于30分钟则跳过重认证。
  • 强认证技术配置文件可根据实际需求替换为其他方式(比如短信验证码、硬件令牌等),只需保证输出lastStrongAuthTime声明即可。

内容的提问来源于stack exchange,提问作者nullmicgo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:09:52