Azure B2C自定义策略:用户不在目录中时如何自动跳转至注册页?
基于Azure B2C自定义策略的按需用户验证与注册跳转实现
核心逻辑
无需批量同步用户数据,在用户登录流程中加入B2C目录用户存在性检查,若用户未注册则自动引导至注册环节,基于入门包自定义策略即可实现。
具体配置步骤
1. 添加用户存在性检查技术配置
在TrustFrameworkExtensions.xml中新增技术配置,调用B2C内置的用户读取端点验证用户是否存在:
<TechnicalProfile Id="AAD-UserExistsCheck"> <Metadata> <Item Key="Operation">Read</Item> <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item> <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">该用户未注册,请完成注册</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" /> </OutputClaims> <IncludeTechnicalProfile ReferenceId="AAD-Common" /> </TechnicalProfile>
2. 修改用户旅程,添加分支逻辑
在用户旅程的登录步骤后,新增验证与跳转分支:
<UserJourney Id="SignInOrSignUp"> <OrchestrationSteps> <!-- 原有登录页面展示步骤 --> <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin"> <ClaimsProviderSelections> <ClaimsProviderSelection TargetClaimsExchangeId="LocalAccountSigninEmailExchange" /> </ClaimsProviderSelections> <ClaimsExchanges> <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" /> </ClaimsExchanges> </OrchestrationStep> <!-- 新增:检查用户是否存在于B2C目录 --> <OrchestrationStep Order="2" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimsExist" ExecuteActionsIf="true"> <Value>objectId</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="AADUserExistsCheckExchange" TechnicalProfileReferenceId="AAD-UserExistsCheck" /> </ClaimsExchanges> </OrchestrationStep> <!-- 新增:用户不存在时跳转至注册流程 --> <OrchestrationStep Order="3" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimsExist" ExecuteActionsIf="true"> <Value>objectId</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="LocalAccountSignUpExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" /> </ClaimsExchanges> </OrchestrationStep> <!-- 保留原有后续流程步骤(如信息收集、令牌颁发等) --> <OrchestrationStep Order="4" Type="ClaimsExchange"> <!-- 原有配置内容 --> </OrchestrationStep> </OrchestrationSteps> </UserJourney>
3. 可选:自定义错误提示
可修改AAD-UserExistsCheck中的UserMessageIfClaimsPrincipalDoesNotExist值,或通过UI自定义调整提示样式,优化用户体验。
关键注意点
- 依赖入门包中已有的
AAD-Common技术配置,确保其正常引用以实现B2C目录交互 - 测试时使用未在B2C注册的邮箱登录,验证是否自动触发注册流程
- 全程无需调用Graph API批量同步用户数据,完全基于登录时的按需验证实现
内容的提问来源于stack exchange,提问作者Gowtham k
相关产品推荐
相关产品推荐

