Azure AD如何实现任意域名邮箱的邮箱密码自助注册登录?
基于Azure AD实现任意域名邮箱+密码自助注册的可行方案
核心问题根源:普通Azure AD租户内置的自助注册用户流搭配邮件OTP功能时,所有非租户已验证域名的邮箱用户都会被创建为B2B来宾用户,这类用户的身份源被标记为邮件OTP,系统不会开放固定密码设置入口,即使通过接口强行写入密码,登录时也会强制走OTP校验流程,无法直接使用邮箱+密码登录。
方案1:使用Azure AD B2C(原生支持需求,推荐首选)
这是微软官方针对面向外部用户的自助注册场景设计的服务,完全满足需求,配置逻辑如下:
- 单独创建Azure AD B2C租户,将你的Web应用注册到该B2C租户下
- 新建「注册和登录」类型的用户流,身份提供程序勾选「本地账户 - 电子邮件」,不需要额外配置域名白名单,默认支持任意域名的邮箱注册
- 用户进入注册流程时,需要先输入邮箱完成验证码校验,之后自行设置固定密码,注册完成后为B2C租户的本地成员用户,后续登录直接输入邮箱+密码即可,不会重复触发OTP校验
- 你需要的Google、Facebook等第三方身份源可以和本地邮箱密码注册入口并行配置在同一个用户流中,用户可自行选择登录方式
- 如果需要复用现有普通Azure AD租户内的员工账号,只需要在B2C租户中把原有Azure AD配置为SAML/OpenID Connect身份提供程序,即可实现单入口同时支持内部员工、外部任意邮箱用户、第三方社交账号登录。
方案2:现有普通Azure AD租户改造(仅适用于支持固定域名范围的场景,不支持任意域名)
如果不想单独使用B2C租户,且你只需要支持特定几个邮箱域名后缀的用户注册,可以按以下逻辑配置:
- 在Azure AD租户中添加需要支持的邮箱域名后缀,完成域名所有权验证
- 弃用内置的自助注册用户流,自行开发注册前端页面,收集用户邮箱、自定义密码等信息
- 自有逻辑完成邮箱所有权校验(向用户邮箱发送验证码确认归属)后,调用Microsoft Graph API创建成员类型用户,创建时将
userPrincipalName设为用户邮箱,passwordProfile传入用户设置的密码,accountEnabled设为true - 配置应用登录策略,允许该类用户直接使用邮箱+密码登录
- 注意:普通Azure AD租户不支持创建UPN后缀为未验证域名的成员用户,因此该方案无法实现任意域名邮箱注册的需求。
踩坑提示:不要尝试给邮件OTP流程生成的来宾用户手动分配密码,这类用户的身份源属性被标记为
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

