Azure AD连接Azure B2C时避免创建影子账户
避免Azure B2C中Azure AD登录生成影子账户的方案
当使用Azure AD作为Azure B2C的身份提供商时,默认会为每个联合登录的用户创建本地影子账户。以下是几种可行的解决方法:
1. 配置联合登录为“仅身份提供商验证”模式
通过调整用户流或自定义策略,让B2C仅依赖Azure AD的身份断言,不在本地目录中创建账户:
- 用户流配置:在Azure门户的B2C用户流中,选择对应的联合登录用户流,进入「用户属性」页面,取消勾选所有需要存储的用户属性;接着在「身份提供商」设置中,启用“仅使用身份提供商身份验证”选项(部分版本表述为“不创建本地账户”)。
- 自定义策略配置:修改策略中的
<TechnicalProfile>节点,移除<PersistedClaims>部分(或设置PersistClaims="false"),确保不会将Azure AD返回的属性持久化到B2C本地目录;同时在<RelyingParty>的<OutputClaims>中仅保留应用所需的断言属性,不包含本地账户标识。
2. 通过Azure AD Connect同步内部用户到B2C
将内部Azure AD的用户同步到B2C目录,让联合登录时匹配已有账户而非创建影子账户:
- 配置Azure AD Connect,设置同步规则将内部Azure AD的用户(需确保唯一标识如
userPrincipalName或mail一致)同步到B2C目录。 - 同步完成后,用户通过Azure AD登录时,B2C会自动匹配已同步的账户,避免生成新的影子账户。注意需确保同步的属性符合B2C的要求,且同步范围精准。
3. 自定义策略中实现账户匹配逻辑
通过自定义策略添加账户检查步骤,在登录时验证Azure AD用户是否已存在于B2C目录:
- 在自定义策略的编排步骤(Orchestration Steps)中,新增一个调用Microsoft Graph API的步骤,根据Azure AD返回的用户标识(如
email或userPrincipalName)查询B2C目录中的用户。 - 如果查询到已有用户,则直接使用该用户的
objectId继续流程;如果未查询到,再执行账户创建逻辑(或根据业务需求跳过创建)。此方法需要配置Graph API的应用权限,并编写对应的TechnicalProfile实现查询逻辑。
内容的提问来源于stack exchange,提问作者robert trudel
相关产品推荐
相关产品推荐

