如何为Azure AD B2C自定义策略设置2FA登录免验证期(如21天)?
解决Azure AD B2C自定义策略中记住MFA状态的问题
由于Azure AD B2C自定义策略完全独立于租户内置的MFA设置,你需要通过修改自定义策略的会话管理配置来实现“记住MFA状态”的功能,具体步骤如下:
1. 添加RememberMFA技术配置文件
在你的TrustFrameworkExtensions.xml文件中,找到<ClaimsProviders>节点,添加以下技术配置文件,用于定义MFA状态的过期时长(这里设置为21天,即1814400秒):
<ClaimsProvider> <DisplayName>Session Management</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="SM-RemoveMFA"> <DisplayName>Session Management Provider</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="SessionExpiryType">Absolute</Item> <Item Key="SessionExpiryInSeconds">1814400</Item> </Metadata> </TechnicalProfile> <TechnicalProfile Id="SM-RememberMFA"> <DisplayName>Session Management Provider</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="SessionExpiryType">Rolling</Item> <Item Key="SessionExpiryInSeconds">1814400</Item> <Item Key="RememberMFAToCookie">true</Item> </Metadata> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
2. 修改MFA验证的技术配置文件
找到你合并策略中负责MFA验证的技术配置文件(比如邮件OTP的Email-Verify、电话OTP的PhoneFactor-Verify、TOTP的TOTP-Verify),在每个对应的<TechnicalProfile>节点中添加<SessionManagement>引用,指定使用上面的SM-RememberMFA:
以邮件OTP为例:
<TechnicalProfile Id="Email-Verify"> <!-- 原有配置内容 --> <SessionManagement ReferenceId="SM-RememberMFA" /> </TechnicalProfile>
对电话OTP和TOTP的验证技术配置文件执行同样操作,添加上述SessionManagement节点。
3. 调整用户旅程中的MFA步骤逻辑
在你的用户旅程(UserJourney)中,找到触发MFA验证的步骤(通常是<OrchestrationStep>中Type为ClaimsExchange,引用MFA验证技术配置的步骤),添加前置判断:检查用户是否已有有效的MFA会话,如果有则跳过验证步骤。
在用户旅程的MFA步骤之前,添加一个新的编排步骤:
<OrchestrationStep Order="X" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimEquals" ExecuteActionsIf="true"> <Value>isActiveMFASession</Value> <Value>true</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <!-- 这里是你原有的MFA验证ClaimsExchange,比如选择MFA方法、验证OTP/TOTP的交换 --> </ClaimsExchanges> </OrchestrationStep>
关键说明
- 时长计算:21天 = 212460*60 = 1814400秒,你可以根据需求修改
SessionExpiryInSeconds的值。 Rolling类型表示在用户活跃期间会自动延长会话有效期,Absolute则是固定时长后过期,可根据业务需求选择。- 确保用户完成MFA验证后,策略会将
isActiveMFASession声明设置为true,这通常由RememberMFA的会话管理自动处理。
内容的提问来源于stack exchange,提问作者bperniciaro
相关产品推荐
相关产品推荐

