Azure B2C自定义策略配置:限制未受邀外部用户登录
Azure B2C自定义用户流策略配置方案
一、限制外部AAD用户仅受邀登录
1. 拦截未受邀用户并禁用自动账户创建
- 在
TrustFrameworkExtensions.xml中,找到外部AAD身份提供者的ClaimsProvider节点,添加邮箱验证逻辑:<!-- 添加验证邮箱是否在受邀列表的声明转换 --> <ClaimsTransformation Id="ValidateInvitedEmail" TransformationMethod="AssertStringClaimsAreEqual"> <InputClaims> <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim1" /> <InputClaim ClaimTypeReferenceId="invitedEmail" TransformationClaimType="inputClaim2" /> </InputClaims> <InputParameters> <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" /> </InputParameters> </ClaimsTransformation> - 将该验证绑定到外部AAD的
TechnicalProfile(如AAD-Common)的前置流程中:<TechnicalProfile Id="AAD-Common"> <InputClaimsTransformations> <InputClaimsTransformation ReferenceId="ValidateInvitedEmail" /> </InputClaimsTransformations> <!-- 原有配置保留 --> </TechnicalProfile> - 禁用自动创建随机UPN账户:找到AAD用户存储的
TechnicalProfile(如AAD-UserReadUsingEmailAddress),移除所有与用户创建相关的PersistedClaims,仅保留读取逻辑,确保未受邀用户无法写入租户用户库。
2. 管理受邀邮箱列表
- 若邮箱列表静态,可在租户中创建自定义集合属性
invitedEmails,将受邀邮箱存入其中,策略中直接读取该属性进行比对;若列表动态,可通过REST API技术配置文件调用外部服务实时验证邮箱权限。
3. 确保无注册入口
- 在
SignUpOrSignIn.xml的UserJourney节点中,移除所有包含注册逻辑的OrchestrationStep,仅保留登录流程;同时在页面布局配置中,隐藏外部身份提供者的注册按钮,彻底阻断注册路径。
二、让Token包含邮箱字段
- 在
TrustFrameworkExtensions.xml的RelyingParty节点中,添加email作为输出声明:<RelyingParty> <DefaultUserJourney ReferenceId="SignUpOrSignIn" /> <TechnicalProfile Id="PolicyProfile"> <DisplayName>PolicyProfile</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="email" /> <OutputClaim ClaimTypeReferenceId="sub" /> <!-- 其他需返回的声明按需添加 --> </OutputClaims> <SubjectNamingInfo ClaimType="sub" /> </TechnicalProfile> </RelyingParty> - 确保外部AAD身份提供者的
TechnicalProfile正确提取邮箱声明:<TechnicalProfile Id="AAD-OIDC"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" /> <!-- 其他身份声明 --> </OutputClaims> </TechnicalProfile>
三、验证要点
- 用未受邀邮箱测试:应在身份验证阶段被拦截,无法进入租户创建账户
- 用受邀邮箱测试:正常跳转至外部AAD完成其组织的MFA/密码验证,登录后租户中关联的账户使用受邀邮箱作为标识,无随机UPN生成
- 解码登录返回的Token:确认
email字段存在且值与受邀邮箱一致
内容的提问来源于stack exchange,提问作者grom
相关产品推荐
相关产品推荐

