Azure AD B2C仅本地账户自定义策略能否用邮箱替代UPN登录
仅本地账户Azure AD B2C自定义策略(无注册)邮箱登录修改步骤
以下修改完全适配仅保留本地账户登录、无自助注册流程的策略场景,无需引入额外冗余逻辑:
1. 声明架构调整
在基础策略的<ClaimsSchema>节点中做如下配置:
- 启用
signInNames.emailAddress声明,添加如下定义(已有则跳过冲突配置即可):
<ClaimType Id="signInName"> <DisplayName>邮箱地址</DisplayName> <DataType>string</DataType> <UserHelpText>请输入账户绑定的邮箱地址</UserHelpText> <UserInputType>EmailBox</UserInputType> <Restriction> <Pattern RegularExpression="^[a-zA-Z0-9.!#$%&'^_`{}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$" HelpText="请输入合法的邮箱格式" /> </Restriction> </ClaimType>
- 禁用原
signInNames.userName(UPN关联字段)的默认输入限制,避免策略优先读取用户名作为登录标识
2. 登录技术配置文件修改
找到本地账户登录对应的技术配置文件(默认ID为SelfAsserted-LocalAccountSignin-Email):
- 将
<InputClaims>节点下的signInName声明关联到邮箱字段,移除UPN相关的输入声明 - 将
<ValidationTechnicalProfiles>中调用的用户查询逻辑,从原UPN查询替换为邮箱查询,引用AAD-UserReadUsingEmailAddress技术配置文件即可:
<ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress" />
如果策略中没有该技术配置文件,可新增对应配置,将查询条件设置为signInNames.emailAddress eq {signInName},返回用户objectId、密码哈希等必要认证声明即可
3. 前端展示调整
在内容定义或本地化资源中,将登录页原“用户名”字段的提示文字修改为“邮箱地址”,移除所有注册、用户名设置相关的页面元素,匹配无注册功能的需求
4. 前置数据校验
修改正式上线前,确认所有存量本地账户的signInNames.emailAddress字段都已绑定有效、无重复的邮箱,避免现有用户登录时匹配失败。测试时确认认证流程不再校验UPN后缀,仅验证邮箱和密码的匹配性即可
注意:如果你的租户此前默认要求UPN作为登录标识,需要先批量将存量用户的绑定邮箱同步到
signInNames.emailAddress属性,再上线修改后的策略
内容的提问来源于stack exchange,提问作者Karikalan
相关产品推荐
相关产品推荐

