Azure B2C自定义策略:RadioSingleSelect按钮本地化失败求助
解决B2C selfAsserted页面MFA单选按钮本地化问题
核心原因
MFA方式的单选按钮文本并非来自selfAsserted页面的通用本地化字符串,而是直接关联身份提供者(IdP)或MFA方法的定义名称,或者由B2C策略中的ClaimsProvider/TechnicalProfile配置决定。
具体解决步骤
1. 检查MFA TechnicalProfile的Display Name配置
如果是内置MFA方法(如短信、电话、微软Authenticator),需要在策略的<ClaimsProvider>里修改对应TechnicalProfile的DisplayName,并通过本地化文件映射:
- 在策略XML中找到对应MFA的ClaimsProvider,比如短信MFA:
<ClaimsProvider> <DisplayName>Phone factor</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="PhoneFactor-InputOrVerify"> <DisplayName>短信验证</DisplayName> <!-- 默认显示名,本地化需映射 --> ... </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
- 在本地化文件中添加对应的StringID,注意空格替换为下划线:
<LocalizedString ElementType="ClaimsProvider" StringId="claimsprovider_Phone_factor_technicalprofile_短信验证">替换为你的本地化文本</LocalizedString>
2. 使用自定义UI扩展的JavaScript动态修改
如果上述方法不生效,可通过selfAsserted页面的自定义脚本直接修改单选按钮文本:
- 在自定义HTML页面的
<script>标签中添加逻辑:
document.addEventListener('DOMContentLoaded', function() { // 定位MFA单选按钮组 const radioLabels = document.querySelectorAll('.radioSingleSelect label'); radioLabels.forEach(label => { // 根据默认文本匹配替换 switch(label.textContent.trim()) { case "Text message": label.textContent = "本地化短信验证文本"; break; case "Phone call": label.textContent = "本地化电话验证文本"; break; case "Microsoft Authenticator": label.textContent = "本地化微软验证器文本"; break; } }); });
- 确保自定义UI策略中已启用JavaScript:
<RelyingParty> <DefaultUserJourney ReferenceId="SignUpOrSignIn" /> <UserJourneyBehaviors> <ScriptExecution>Allow</ScriptExecution> </UserJourneyBehaviors> </RelyingParty>
3. 验证本地化策略的作用范围
确保本地化文件的Target属性覆盖了selfAsserted页面所在的用户旅程,同时尝试映射ClaimType的显示名:
<Localization Enabled="true"> <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll"> <SupportedLanguage>zh-CN</SupportedLanguage> </SupportedLanguages> <LocalizedResources Id="api.selfasserted.zh-CN"> <!-- 已有标题本地化 --> <LocalizedString ElementType="UxElement" StringId="title">设置首选验证方式</LocalizedString> <!-- 尝试映射MFA选项的ClaimType显示名 --> <LocalizedString ElementType="ClaimType" StringId="strongAuthenticationMethod"> <LocalizedClaimTypeDisplayName>本地化选项文本</LocalizedClaimTypeDisplayName> </LocalizedString> </LocalizedResources> </Localization>
关键注意事项
- 优先通过ClaimsProvider的Display Name映射,避免直接修改B2C内置StringID。
- 测试前清除浏览器缓存,确保加载最新的本地化配置和自定义UI资源。
内容的提问来源于stack exchange,提问作者NickKurtDale
相关产品推荐
相关产品推荐

