Azure AD B2C自定义策略问题:登录页MFA选择下拉框未显示
解决Azure AD B2C登录页面MFA选择下拉框不显示的问题
问题原因
使用CombinedSignInAndSignUp类型的编排步骤时,对应的api.signuporsignin内容定义模板仅支持基础登录选项展示,不会渲染自断言技术配置中添加的自定义输出声明(如selectedAuthenticationMethod),导致下拉框无法显示,进而因缺少该声明触发报错。
解决方案
1. 启用自断言登录页面的内容定义引用
在SelfAsserted-LocalAccountSignin-Email技术配置中,取消注释并启用ContentDefinitionReferenceId项,指定使用单独的登录页面模板:
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email"> <!-- 其他配置项 --> <Metadata> <!-- 取消注释并启用以下配置 --> <Item Key="ContentDefinitionReferenceId">api.localaccountsignin</Item> <!-- 其他元数据 --> </Metadata> <!-- 其他配置项 --> </TechnicalProfile>
2. 替换Combined登录步骤为单独的自断言登录步骤
修改子旅程的编排步骤,移除CombinedSignInAndSignUp类型步骤,改用ClaimsExchange类型直接调用自断言登录技术配置:
<SubJourney Id="SignInBase" Type="Call"> <OrchestrationSteps> <!-- 替换原Order=1的Combined步骤 --> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" /> </ClaimsExchanges> </OrchestrationStep> <!-- 保留后续步骤 --> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADUserReadWithEmailAddressBefore" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" /> </ClaimsExchanges> </OrchestrationStep> <!-- 其他编排步骤 --> </OrchestrationSteps> </SubJourney>
3. 匹配本地化资源的内容定义ID
调整本地化配置的Id,使其与技术配置中指定的ContentDefinitionReferenceId一致:
<LocalizedResources Id="api.localaccountsignin.en"> <LocalizedCollections> <LocalizedCollection ElementType="ClaimType" ElementId="selectedAuthenticationMethod" TargetCollection="Restriction"> <Item Text="App" Value="app" SelectByDefault="true" /> <Item Text="Phone" Value="phone" /> <Item Text="Email" Value="email" /> </LocalizedCollection> </LocalizedCollections> <LocalizedStrings> <!-- 本地化字符串配置 --> </LocalizedStrings> </LocalizedResources>
4. 验证声明流转
确保selectedAuthenticationMethod声明在后续的MFA验证步骤中被正确引用,例如通过该声明的值动态选择对应的MFA技术配置(如基于声明值调用电话验证、邮件验证或应用验证的技术配置)。
完成以上调整后,登录页面将正确显示MFA方式选择下拉框,用户提交时该声明会被正确收集,避免因缺少认证方法导致的报错。
内容的提问来源于stack exchange,提问作者myself
相关产品推荐
相关产品推荐

