Azure B2C自定义策略适配本地登录与Azure AD IdP登录问题咨询
问题根因与修改方案
你遇到的本地登录报错问题是两个配置疏漏共同导致的,按以下步骤修改即可同时支持两种登录方式:
1. 修复本地登录技术配置的声明输出
本地登录走的SelfAsserted-LocalAccountSignin-Email技术配置默认不会显式赋值authenticationSource声明,需要你手动补充输出,避免后续步骤判定逻辑混乱:
在SelfAsserted-LocalAccountSignin-Email的<OutputClaims>节点下新增:
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" AlwaysUseDefaultValue="true" />
确保本地登录成功后,authenticationSource的值固定为localAccountAuthentication,和社交登录的声明值明确区分。
2. 移除AAD技术配置的不必要强制默认值
你当前的AAD-GB-OpenIdConnect技术配置中,authenticationSource设置了AlwaysUseDefaultValue="true",虽然本地登录流程不会走到这个TP,但如果后续有会话复用等场景会出现声明覆盖问题,建议改为只有声明不存在时才用默认值:
把该行修改为:
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="false" />
3. 清理用户旅程中无用的注册节点
你已经明确要求禁用自主注册,当前用户旅程Step2中的SignUpWithLogonEmailExchange属于冗余配置,直接删除即可,避免意外触发注册流程。
修改后的Step2<ClaimsExchanges>节点为:
<ClaimsExchanges> <ClaimsExchange Id="AzureADXXXXXXXXExchange" TechnicalProfileReferenceId="AAD-GB-OpenIdConnect" /> </ClaimsExchanges>
4. (可选)修复静默创建AAD用户的逻辑
你当前的用户旅程Step4仍然保留了SelfAsserted-Social的自断言页面,会要求AAD登录的用户补充信息,不符合你提到的「无需用户填写信息直接创建账号」的需求,直接删除Step4即可,AAD返回的声明足够直接创建B2C用户。
5. (可选)规避用户创建时的邮箱验证问题
如果你在首次AAD登录创建用户时出现邮箱验证相关报错,可以在AAD-UserWriteUsingAlternativeSecurityId的<PersistedClaims>节点新增:
<PersistedClaim ClaimTypeReferenceId="otherMails" /> <PersistedClaim ClaimTypeReferenceId="mail" PartnerClaimType="email" />
直接用AAD返回的可信邮箱填充字段,跳过B2C的邮箱验证逻辑。
修改完成后重新上传策略测试,本地登录和AAD社交登录都可以正常运行。
内容的提问来源于stack exchange,提问作者Architect Jamie
相关产品推荐
相关产品推荐

